@palate/cli 0.0.0-stage → 0.0.2
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/LICENSE +20 -0
- package/README.md +153 -2
- package/bin/palate.mjs +894 -0
- package/kb/anatomy/data-table.md +24 -0
- package/kb/anatomy/empty-state.md +16 -0
- package/kb/anatomy/filter-toolbar.md +19 -0
- package/kb/anatomy/meter.md +16 -0
- package/kb/anatomy/product-window.md +18 -0
- package/kb/anatomy/settings-page.md +18 -0
- package/kb/anatomy/status-indicator.md +17 -0
- package/kb/anatomy/toast-undo.md +16 -0
- package/kb/bench/briefs.json +618 -0
- package/kb/craft/SOURCES.md +48 -0
- package/kb/craft/creativity.md +55 -0
- package/kb/craft/details.md +75 -0
- package/kb/craft/landing-demos.md +46 -0
- package/kb/craft/mistakes.md +73 -0
- package/kb/craft/motion.md +53 -0
- package/kb/craft/principles.md +68 -0
- package/kb/index/discovery.json +1 -0
- package/kb/inspiration/index.json +79 -0
- package/kb/moves/animated-comparison-table.md +58 -0
- package/kb/moves/before-after-slider.md +58 -0
- package/kb/moves/bento-live-tiles.md +57 -0
- package/kb/moves/calm-motion-system.md +63 -0
- package/kb/moves/canvas-grain.md +58 -0
- package/kb/moves/changelog-as-magazine.md +56 -0
- package/kb/moves/code-drawn-diagram.md +56 -0
- package/kb/moves/colophon.md +54 -0
- package/kb/moves/command-palette-site-nav.md +58 -0
- package/kb/moves/confetti-free-celebration.md +58 -0
- package/kb/moves/console-easter-egg.md +57 -0
- package/kb/moves/copy-confirmation.md +57 -0
- package/kb/moves/cursor-reactive-light.md +57 -0
- package/kb/moves/dark-band-contrast-section.md +55 -0
- package/kb/moves/designed-dark-mode.md +58 -0
- package/kb/moves/duotone-photography.md +55 -0
- package/kb/moves/editorial-drop-cap.md +58 -0
- package/kb/moves/editorial-grid-pull-quotes.md +55 -0
- package/kb/moves/engraving-colour-lens.md +64 -0
- package/kb/moves/explorable-control.md +57 -0
- package/kb/moves/feature-films-on-painted-stages.md +58 -0
- package/kb/moves/first-win-onboarding.md +59 -0
- package/kb/moves/footer-live-status.md +56 -0
- package/kb/moves/footer-rewards-the-end.md +58 -0
- package/kb/moves/generative-brand-pattern.md +55 -0
- package/kb/moves/gentle-error-nudge.md +59 -0
- package/kb/moves/halftone-dot-imagery.md +55 -0
- package/kb/moves/hand-drawn-annotations.md +55 -0
- package/kb/moves/hero-paints-itself-in.md +65 -0
- package/kb/moves/honest-progress-narration.md +58 -0
- package/kb/moves/honest-testimonial-wall.md +57 -0
- package/kb/moves/inline-sparklines-in-copy.md +57 -0
- package/kb/moves/inspect-our-taste.md +58 -0
- package/kb/moves/interactive-pricing-calculator.md +59 -0
- package/kb/moves/isometric-illustration-system.md +56 -0
- package/kb/moves/kinetic-variable-type.md +57 -0
- package/kb/moves/konami-secret.md +59 -0
- package/kb/moves/layered-paper-depth.md +56 -0
- package/kb/moves/lightweight-3d-object-hero.md +59 -0
- package/kb/moves/line-engraving-from-image.md +63 -0
- package/kb/moves/link-preview-peek.md +57 -0
- package/kb/moves/live-data-ticker.md +61 -0
- package/kb/moves/made-with-proof.md +51 -0
- package/kb/moves/magnetic-buttons.md +55 -0
- package/kb/moves/marquee-done-right.md +58 -0
- package/kb/moves/moves.yaml +450 -0
- package/kb/moves/museum-painting-backdrop.md +59 -0
- package/kb/moves/one-colour-brand-world.md +56 -0
- package/kb/moves/playful-404.md +58 -0
- package/kb/moves/pointer-highlight-word.md +56 -0
- package/kb/moves/product-in-context.md +56 -0
- package/kb/moves/real-world-data.md +58 -0
- package/kb/moves/referral-reward-reveal.md +59 -0
- package/kb/moves/riso-print-texture.md +57 -0
- package/kb/moves/screenshot-detail-crops.md +56 -0
- package/kb/moves/scroll-progress-chapters.md +57 -0
- package/kb/moves/scroll-scrubbed-product-film.md +62 -0
- package/kb/moves/self-playing-product-demo.md +61 -0
- package/kb/moves/shape-continuity-morph.md +58 -0
- package/kb/moves/sliding-nav-indicator.md +58 -0
- package/kb/moves/sticky-scroll-story.md +56 -0
- package/kb/moves/story-led-long-scroll.md +56 -0
- package/kb/moves/tactile-button.md +63 -0
- package/kb/moves/technical-drawing-lines.md +57 -0
- package/kb/moves/time-of-day-theming.md +56 -0
- package/kb/moves/tiny-game-easter-egg.md +60 -0
- package/kb/moves/type-decode-reveal.md +57 -0
- package/kb/moves/typographic-numeral-hero.md +58 -0
- package/kb/moves/view-transitions-between-pages.md +57 -0
- package/kb/moves/waitlist-position-live.md +60 -0
- package/kb/patterns/app-team-members.md +27 -0
- package/kb/patterns/chat-agent-approvals.md +31 -0
- package/kb/patterns/commerce-product-page.md +34 -0
- package/kb/patterns/dashboard-entity-table.md +37 -0
- package/kb/patterns/dashboard-home-today.md +24 -0
- package/kb/patterns/docs-api-reference.md +31 -0
- package/kb/patterns/marketing-product-led-landing.md +30 -0
- package/kb/patterns/mobile-daily-checklist.md +26 -0
- package/kb/references/index.json +1 -0
- package/kb/references/thumbs/004c5e9072.jpg +0 -0
- package/kb/references/thumbs/008915eb21.jpg +0 -0
- package/kb/references/thumbs/0098cf66c2.jpg +0 -0
- package/kb/references/thumbs/012e61b31f.jpg +0 -0
- package/kb/references/thumbs/014d4e46fc.jpg +0 -0
- package/kb/references/thumbs/01e54f394a.jpg +0 -0
- package/kb/references/thumbs/01e99a579c.jpg +0 -0
- package/kb/references/thumbs/01fd014575.jpg +0 -0
- package/kb/references/thumbs/022778ca72.jpg +0 -0
- package/kb/references/thumbs/02717bf1e1.jpg +0 -0
- package/kb/references/thumbs/02a5cfdbe9.jpg +0 -0
- package/kb/references/thumbs/02c9823f8d.jpg +0 -0
- package/kb/references/thumbs/02f3974613.jpg +0 -0
- package/kb/references/thumbs/032427f1ce.jpg +0 -0
- package/kb/references/thumbs/03ba677d07.jpg +0 -0
- package/kb/references/thumbs/04f2476cfe.jpg +0 -0
- package/kb/references/thumbs/0563e7c52e.jpg +0 -0
- package/kb/references/thumbs/05fa6b8eef.jpg +0 -0
- package/kb/references/thumbs/065bce1517.jpg +0 -0
- package/kb/references/thumbs/06c017f113.jpg +0 -0
- package/kb/references/thumbs/0770e2d8d3.jpg +0 -0
- package/kb/references/thumbs/078a26c4cb.jpg +0 -0
- package/kb/references/thumbs/08679b6e84.jpg +0 -0
- package/kb/references/thumbs/088c45a34c.jpg +0 -0
- package/kb/references/thumbs/089e9fd4e4.jpg +0 -0
- package/kb/references/thumbs/08f773231e.jpg +0 -0
- package/kb/references/thumbs/093ca3e2e3.jpg +0 -0
- package/kb/references/thumbs/0963320f74.jpg +0 -0
- package/kb/references/thumbs/09fc1ded85.jpg +0 -0
- package/kb/references/thumbs/0a368f3963.jpg +0 -0
- package/kb/references/thumbs/0a9e0e5201.jpg +0 -0
- package/kb/references/thumbs/0aace67ee7.jpg +0 -0
- package/kb/references/thumbs/0b61ecf793.jpg +0 -0
- package/kb/references/thumbs/0bde18ae09.jpg +0 -0
- package/kb/references/thumbs/0bf7ee8143.jpg +0 -0
- package/kb/references/thumbs/0ca20a13e0.jpg +0 -0
- package/kb/references/thumbs/0cdc0198c4.jpg +0 -0
- package/kb/references/thumbs/0cf9790b28.jpg +0 -0
- package/kb/references/thumbs/0d0202904b.jpg +0 -0
- package/kb/references/thumbs/0d053aba18.jpg +0 -0
- package/kb/references/thumbs/0d0c2c13d2.jpg +0 -0
- package/kb/references/thumbs/0d30be99b0.jpg +0 -0
- package/kb/references/thumbs/0d503da1b7.jpg +0 -0
- package/kb/references/thumbs/0ddad7b740.jpg +0 -0
- package/kb/references/thumbs/0e0a148101.jpg +0 -0
- package/kb/references/thumbs/0e401b6b75.jpg +0 -0
- package/kb/references/thumbs/0e8f32ba0f.jpg +0 -0
- package/kb/references/thumbs/0ef1966a7d.jpg +0 -0
- package/kb/references/thumbs/0efd416d11.jpg +0 -0
- package/kb/references/thumbs/0f3af263ae.jpg +0 -0
- package/kb/references/thumbs/0f9644c3a5.jpg +0 -0
- package/kb/references/thumbs/1020552737.jpg +0 -0
- package/kb/references/thumbs/1037626587.jpg +0 -0
- package/kb/references/thumbs/10512b7e94.jpg +0 -0
- package/kb/references/thumbs/106dc4a7b5.jpg +0 -0
- package/kb/references/thumbs/108943f6f7.jpg +0 -0
- package/kb/references/thumbs/10a5551d51.jpg +0 -0
- package/kb/references/thumbs/10dd01076c.jpg +0 -0
- package/kb/references/thumbs/11b06e39da.jpg +0 -0
- package/kb/references/thumbs/11baa1ec83.jpg +0 -0
- package/kb/references/thumbs/11bbe12167.jpg +0 -0
- package/kb/references/thumbs/11ca37feb8.jpg +0 -0
- package/kb/references/thumbs/11f14d3f12.jpg +0 -0
- package/kb/references/thumbs/124530ceb5.jpg +0 -0
- package/kb/references/thumbs/1276402336.jpg +0 -0
- package/kb/references/thumbs/1280e5c9d6.jpg +0 -0
- package/kb/references/thumbs/12cac0d172.jpg +0 -0
- package/kb/references/thumbs/138be6623a.jpg +0 -0
- package/kb/references/thumbs/13a0c544d1.jpg +0 -0
- package/kb/references/thumbs/13a32cb94c.jpg +0 -0
- package/kb/references/thumbs/144035d641.jpg +0 -0
- package/kb/references/thumbs/1457e41924.jpg +0 -0
- package/kb/references/thumbs/14972e3a86.jpg +0 -0
- package/kb/references/thumbs/15a47f2e4c.jpg +0 -0
- package/kb/references/thumbs/15aa15d22e.jpg +0 -0
- package/kb/references/thumbs/160dcd24b7.jpg +0 -0
- package/kb/references/thumbs/1610978529.jpg +0 -0
- package/kb/references/thumbs/16db30ba37.jpg +0 -0
- package/kb/references/thumbs/16f19ae4f3.jpg +0 -0
- package/kb/references/thumbs/16f758b03f.jpg +0 -0
- package/kb/references/thumbs/1748e5b751.jpg +0 -0
- package/kb/references/thumbs/175d0b0e69.jpg +0 -0
- package/kb/references/thumbs/178f571a36.jpg +0 -0
- package/kb/references/thumbs/17c43dc025.jpg +0 -0
- package/kb/references/thumbs/17c7f05b50.jpg +0 -0
- package/kb/references/thumbs/17f97e61dd.jpg +0 -0
- package/kb/references/thumbs/1804e17365.jpg +0 -0
- package/kb/references/thumbs/195c162ed1.jpg +0 -0
- package/kb/references/thumbs/19e3699c29.jpg +0 -0
- package/kb/references/thumbs/1a48e0a4d5.jpg +0 -0
- package/kb/references/thumbs/1a6cda265e.jpg +0 -0
- package/kb/references/thumbs/1a7e012091.jpg +0 -0
- package/kb/references/thumbs/1a9173a172.jpg +0 -0
- package/kb/references/thumbs/1b34a6b4d2.jpg +0 -0
- package/kb/references/thumbs/1b5284f3b2.jpg +0 -0
- package/kb/references/thumbs/1b93fbd6d3.jpg +0 -0
- package/kb/references/thumbs/1c6728fef6.jpg +0 -0
- package/kb/references/thumbs/1c6f101618.jpg +0 -0
- package/kb/references/thumbs/1cf7011a94.jpg +0 -0
- package/kb/references/thumbs/1d1769e539.jpg +0 -0
- package/kb/references/thumbs/1d1fd23199.jpg +0 -0
- package/kb/references/thumbs/1d7b6602ac.jpg +0 -0
- package/kb/references/thumbs/1dbbc61b9e.jpg +0 -0
- package/kb/references/thumbs/1dbdd6d21d.jpg +0 -0
- package/kb/references/thumbs/1dd873744b.jpg +0 -0
- package/kb/references/thumbs/1df4dd7cf9.jpg +0 -0
- package/kb/references/thumbs/1ece8c35b8.jpg +0 -0
- package/kb/references/thumbs/1f0e5b9aa4.jpg +0 -0
- package/kb/references/thumbs/1f1419651b.jpg +0 -0
- package/kb/references/thumbs/1f2a6da92d.jpg +0 -0
- package/kb/references/thumbs/1f651f33c0.jpg +0 -0
- package/kb/references/thumbs/1f8b697d18.jpg +0 -0
- package/kb/references/thumbs/1fee3824cd.jpg +0 -0
- package/kb/references/thumbs/1ff7757853.jpg +0 -0
- package/kb/references/thumbs/2043182f01.jpg +0 -0
- package/kb/references/thumbs/2059dabcd5.jpg +0 -0
- package/kb/references/thumbs/209d9dbb95.jpg +0 -0
- package/kb/references/thumbs/20d8923554.jpg +0 -0
- package/kb/references/thumbs/210dd3b671.jpg +0 -0
- package/kb/references/thumbs/2120719116.jpg +0 -0
- package/kb/references/thumbs/21a7384429.jpg +0 -0
- package/kb/references/thumbs/225f187391.jpg +0 -0
- package/kb/references/thumbs/230caf7dd2.jpg +0 -0
- package/kb/references/thumbs/235afad355.jpg +0 -0
- package/kb/references/thumbs/2378066687.jpg +0 -0
- package/kb/references/thumbs/241faf68a1.jpg +0 -0
- package/kb/references/thumbs/24d9f1a9b9.jpg +0 -0
- package/kb/references/thumbs/2505c8b9a0.jpg +0 -0
- package/kb/references/thumbs/25593638ca.jpg +0 -0
- package/kb/references/thumbs/25dd454f18.jpg +0 -0
- package/kb/references/thumbs/2602e123e2.jpg +0 -0
- package/kb/references/thumbs/26095c0b11.jpg +0 -0
- package/kb/references/thumbs/26260d6238.jpg +0 -0
- package/kb/references/thumbs/26bba21836.jpg +0 -0
- package/kb/references/thumbs/26bde3520b.jpg +0 -0
- package/kb/references/thumbs/272e22067c.jpg +0 -0
- package/kb/references/thumbs/27421b3226.jpg +0 -0
- package/kb/references/thumbs/2769ebca41.jpg +0 -0
- package/kb/references/thumbs/27e2f6e8b0.jpg +0 -0
- package/kb/references/thumbs/28432ba373.jpg +0 -0
- package/kb/references/thumbs/2846626f19.jpg +0 -0
- package/kb/references/thumbs/28750e821e.jpg +0 -0
- package/kb/references/thumbs/289481230f.jpg +0 -0
- package/kb/references/thumbs/2897967408.jpg +0 -0
- package/kb/references/thumbs/28c0a5fa17.jpg +0 -0
- package/kb/references/thumbs/28c181fba5.jpg +0 -0
- package/kb/references/thumbs/29806f539f.jpg +0 -0
- package/kb/references/thumbs/2997f56ee7.jpg +0 -0
- package/kb/references/thumbs/29b34a10fb.jpg +0 -0
- package/kb/references/thumbs/29bd78cdb4.jpg +0 -0
- package/kb/references/thumbs/29c8c6c22a.jpg +0 -0
- package/kb/references/thumbs/2ac23f7fae.jpg +0 -0
- package/kb/references/thumbs/2b76e13f79.jpg +0 -0
- package/kb/references/thumbs/2b84226479.jpg +0 -0
- package/kb/references/thumbs/2bf2dbf737.jpg +0 -0
- package/kb/references/thumbs/2bf89abbf6.jpg +0 -0
- package/kb/references/thumbs/2c562cd534.jpg +0 -0
- package/kb/references/thumbs/2cfe9d48c4.jpg +0 -0
- package/kb/references/thumbs/2d49f19b27.jpg +0 -0
- package/kb/references/thumbs/2dc8670da7.jpg +0 -0
- package/kb/references/thumbs/2de947c469.jpg +0 -0
- package/kb/references/thumbs/2e075ca79f.jpg +0 -0
- package/kb/references/thumbs/2eb0820e6b.jpg +0 -0
- package/kb/references/thumbs/2ec56a9dc0.jpg +0 -0
- package/kb/references/thumbs/30bb4ad607.jpg +0 -0
- package/kb/references/thumbs/30d19b8444.jpg +0 -0
- package/kb/references/thumbs/3173c71d73.jpg +0 -0
- package/kb/references/thumbs/31e59e4518.jpg +0 -0
- package/kb/references/thumbs/322b8960e8.jpg +0 -0
- package/kb/references/thumbs/325c9be6f4.jpg +0 -0
- package/kb/references/thumbs/3273338982.jpg +0 -0
- package/kb/references/thumbs/32f8387f38.jpg +0 -0
- package/kb/references/thumbs/332f6b74c3.jpg +0 -0
- package/kb/references/thumbs/334b146b6a.jpg +0 -0
- package/kb/references/thumbs/339abd60e4.jpg +0 -0
- package/kb/references/thumbs/33e88ec295.jpg +0 -0
- package/kb/references/thumbs/340931b5d4.jpg +0 -0
- package/kb/references/thumbs/34165a93bd.jpg +0 -0
- package/kb/references/thumbs/34d0575dd7.jpg +0 -0
- package/kb/references/thumbs/3549e75f0a.jpg +0 -0
- package/kb/references/thumbs/35827f1561.jpg +0 -0
- package/kb/references/thumbs/37c50280ec.jpg +0 -0
- package/kb/references/thumbs/37e66ecf11.jpg +0 -0
- package/kb/references/thumbs/3841a04fdc.jpg +0 -0
- package/kb/references/thumbs/38490c088f.jpg +0 -0
- package/kb/references/thumbs/3850319e9f.jpg +0 -0
- package/kb/references/thumbs/3856a64166.jpg +0 -0
- package/kb/references/thumbs/3881f211c2.jpg +0 -0
- package/kb/references/thumbs/38c7dde2f3.jpg +0 -0
- package/kb/references/thumbs/38ce9e486c.jpg +0 -0
- package/kb/references/thumbs/390ea8e01b.jpg +0 -0
- package/kb/references/thumbs/391b7fc27c.jpg +0 -0
- package/kb/references/thumbs/395f7214dc.jpg +0 -0
- package/kb/references/thumbs/39e81a5db2.jpg +0 -0
- package/kb/references/thumbs/3a67c8d655.jpg +0 -0
- package/kb/references/thumbs/3a89c25e3b.jpg +0 -0
- package/kb/references/thumbs/3aa0837542.jpg +0 -0
- package/kb/references/thumbs/3aae18aa8a.jpg +0 -0
- package/kb/references/thumbs/3bdbe767db.jpg +0 -0
- package/kb/references/thumbs/3c0616fc7f.jpg +0 -0
- package/kb/references/thumbs/3c18e9db1d.jpg +0 -0
- package/kb/references/thumbs/3c5a14076c.jpg +0 -0
- package/kb/references/thumbs/3ca9ec15c6.jpg +0 -0
- package/kb/references/thumbs/3d7756fd35.jpg +0 -0
- package/kb/references/thumbs/3dd45bd33d.jpg +0 -0
- package/kb/references/thumbs/3de72d5414.jpg +0 -0
- package/kb/references/thumbs/3dede597af.jpg +0 -0
- package/kb/references/thumbs/3ea948619e.jpg +0 -0
- package/kb/references/thumbs/402c12054c.jpg +0 -0
- package/kb/references/thumbs/403ab4af90.jpg +0 -0
- package/kb/references/thumbs/40773a8c63.jpg +0 -0
- package/kb/references/thumbs/407d9583db.jpg +0 -0
- package/kb/references/thumbs/415dc1d84c.jpg +0 -0
- package/kb/references/thumbs/420b676a4f.jpg +0 -0
- package/kb/references/thumbs/42a1ee85eb.jpg +0 -0
- package/kb/references/thumbs/43059221aa.jpg +0 -0
- package/kb/references/thumbs/432fa0d22c.jpg +0 -0
- package/kb/references/thumbs/43826f20e3.jpg +0 -0
- package/kb/references/thumbs/43ac55c98a.jpg +0 -0
- package/kb/references/thumbs/43d098f3c3.jpg +0 -0
- package/kb/references/thumbs/4449d80c2c.jpg +0 -0
- package/kb/references/thumbs/44625727dc.jpg +0 -0
- package/kb/references/thumbs/4482bb87a1.jpg +0 -0
- package/kb/references/thumbs/44b078acdc.jpg +0 -0
- package/kb/references/thumbs/44d0305850.jpg +0 -0
- package/kb/references/thumbs/456bb6b59e.jpg +0 -0
- package/kb/references/thumbs/45df73ce48.jpg +0 -0
- package/kb/references/thumbs/45edb45d87.jpg +0 -0
- package/kb/references/thumbs/4671d57cd5.jpg +0 -0
- package/kb/references/thumbs/46cc108518.jpg +0 -0
- package/kb/references/thumbs/470022e614.jpg +0 -0
- package/kb/references/thumbs/4719a669ce.jpg +0 -0
- package/kb/references/thumbs/47404f5ad4.jpg +0 -0
- package/kb/references/thumbs/479d3eb977.jpg +0 -0
- package/kb/references/thumbs/479ed92ceb.jpg +0 -0
- package/kb/references/thumbs/47baed50c7.jpg +0 -0
- package/kb/references/thumbs/47fdcfd7b0.jpg +0 -0
- package/kb/references/thumbs/48fd5e94c5.jpg +0 -0
- package/kb/references/thumbs/493807917b.jpg +0 -0
- package/kb/references/thumbs/49a1c67293.jpg +0 -0
- package/kb/references/thumbs/49e2d7fafe.jpg +0 -0
- package/kb/references/thumbs/49f540fcb6.jpg +0 -0
- package/kb/references/thumbs/4a67ec4028.jpg +0 -0
- package/kb/references/thumbs/4a93275b04.jpg +0 -0
- package/kb/references/thumbs/4aae6f52da.jpg +0 -0
- package/kb/references/thumbs/4b1bae66bd.jpg +0 -0
- package/kb/references/thumbs/4b75da15a9.jpg +0 -0
- package/kb/references/thumbs/4b77789b88.jpg +0 -0
- package/kb/references/thumbs/4bc2f3f3a4.jpg +0 -0
- package/kb/references/thumbs/4c48f27b88.jpg +0 -0
- package/kb/references/thumbs/4c52bd8bfb.jpg +0 -0
- package/kb/references/thumbs/4c9b4acc60.jpg +0 -0
- package/kb/references/thumbs/4cbf0752d4.jpg +0 -0
- package/kb/references/thumbs/4cd2672517.jpg +0 -0
- package/kb/references/thumbs/4dd22a8181.jpg +0 -0
- package/kb/references/thumbs/4ee3447314.jpg +0 -0
- package/kb/references/thumbs/4ef29c8144.jpg +0 -0
- package/kb/references/thumbs/4f82fadfd6.jpg +0 -0
- package/kb/references/thumbs/4fc9b643d8.jpg +0 -0
- package/kb/references/thumbs/50549524b0.jpg +0 -0
- package/kb/references/thumbs/509a615883.jpg +0 -0
- package/kb/references/thumbs/50c03ef855.jpg +0 -0
- package/kb/references/thumbs/50cf9acad6.jpg +0 -0
- package/kb/references/thumbs/51131b025c.jpg +0 -0
- package/kb/references/thumbs/51da1124f0.jpg +0 -0
- package/kb/references/thumbs/524d5e7288.jpg +0 -0
- package/kb/references/thumbs/5251247c81.jpg +0 -0
- package/kb/references/thumbs/526b91b7ec.jpg +0 -0
- package/kb/references/thumbs/52f02f6c2e.jpg +0 -0
- package/kb/references/thumbs/530ab530dc.jpg +0 -0
- package/kb/references/thumbs/5335ee4404.jpg +0 -0
- package/kb/references/thumbs/5385b90939.jpg +0 -0
- package/kb/references/thumbs/53c54654cc.jpg +0 -0
- package/kb/references/thumbs/5420794c6c.jpg +0 -0
- package/kb/references/thumbs/542a9dce8b.jpg +0 -0
- package/kb/references/thumbs/5571530a5f.jpg +0 -0
- package/kb/references/thumbs/56cc68d804.jpg +0 -0
- package/kb/references/thumbs/577b7f7c44.jpg +0 -0
- package/kb/references/thumbs/57adf8f1bb.jpg +0 -0
- package/kb/references/thumbs/57c5f5e3a6.jpg +0 -0
- package/kb/references/thumbs/57ffe4e839.jpg +0 -0
- package/kb/references/thumbs/5817dfc7d6.jpg +0 -0
- package/kb/references/thumbs/581a182a7a.jpg +0 -0
- package/kb/references/thumbs/58807679c8.jpg +0 -0
- package/kb/references/thumbs/589a1d9111.jpg +0 -0
- package/kb/references/thumbs/59167391ab.jpg +0 -0
- package/kb/references/thumbs/5a70420166.jpg +0 -0
- package/kb/references/thumbs/5b10df1b8d.jpg +0 -0
- package/kb/references/thumbs/5b7a712fdb.jpg +0 -0
- package/kb/references/thumbs/5bc46b92ad.jpg +0 -0
- package/kb/references/thumbs/5c0546a120.jpg +0 -0
- package/kb/references/thumbs/5c2b6125a8.jpg +0 -0
- package/kb/references/thumbs/5c536b9e42.jpg +0 -0
- package/kb/references/thumbs/5c8e441d30.jpg +0 -0
- package/kb/references/thumbs/5cb6f1baa5.jpg +0 -0
- package/kb/references/thumbs/5ce6c1f21e.jpg +0 -0
- package/kb/references/thumbs/5cef052c0a.jpg +0 -0
- package/kb/references/thumbs/5d08438209.jpg +0 -0
- package/kb/references/thumbs/5d0f9af9b0.jpg +0 -0
- package/kb/references/thumbs/5d300ed332.jpg +0 -0
- package/kb/references/thumbs/5d708a4794.jpg +0 -0
- package/kb/references/thumbs/5de8826a98.jpg +0 -0
- package/kb/references/thumbs/5df7bff22c.jpg +0 -0
- package/kb/references/thumbs/5e087d0f00.jpg +0 -0
- package/kb/references/thumbs/5e44e70ca0.jpg +0 -0
- package/kb/references/thumbs/5eff5d80ce.jpg +0 -0
- package/kb/references/thumbs/5f015c96b1.jpg +0 -0
- package/kb/references/thumbs/5f3289b7c4.jpg +0 -0
- package/kb/references/thumbs/5f830c40eb.jpg +0 -0
- package/kb/references/thumbs/60c4c3527b.jpg +0 -0
- package/kb/references/thumbs/60e9e594dd.jpg +0 -0
- package/kb/references/thumbs/615421d7be.jpg +0 -0
- package/kb/references/thumbs/6176e4004f.jpg +0 -0
- package/kb/references/thumbs/61f0fe5e06.jpg +0 -0
- package/kb/references/thumbs/6213785db4.jpg +0 -0
- package/kb/references/thumbs/62a670ae09.jpg +0 -0
- package/kb/references/thumbs/63cc12981b.jpg +0 -0
- package/kb/references/thumbs/641f15cc71.jpg +0 -0
- package/kb/references/thumbs/642ab2081d.jpg +0 -0
- package/kb/references/thumbs/644a59bf6e.jpg +0 -0
- package/kb/references/thumbs/644da8a8e3.jpg +0 -0
- package/kb/references/thumbs/6458986897.jpg +0 -0
- package/kb/references/thumbs/64cfbd7b93.jpg +0 -0
- package/kb/references/thumbs/661a57686a.jpg +0 -0
- package/kb/references/thumbs/66355a813a.jpg +0 -0
- package/kb/references/thumbs/664396dd44.jpg +0 -0
- package/kb/references/thumbs/66d832d65f.jpg +0 -0
- package/kb/references/thumbs/66de9e9833.jpg +0 -0
- package/kb/references/thumbs/6750964fd9.jpg +0 -0
- package/kb/references/thumbs/67c7164832.jpg +0 -0
- package/kb/references/thumbs/681600b6cd.jpg +0 -0
- package/kb/references/thumbs/682e75afe4.jpg +0 -0
- package/kb/references/thumbs/69274bc952.jpg +0 -0
- package/kb/references/thumbs/696ec08c52.jpg +0 -0
- package/kb/references/thumbs/69760111cc.jpg +0 -0
- package/kb/references/thumbs/697e32664f.jpg +0 -0
- package/kb/references/thumbs/69df92544b.jpg +0 -0
- package/kb/references/thumbs/69e48c5229.jpg +0 -0
- package/kb/references/thumbs/6a5fb75de1.jpg +0 -0
- package/kb/references/thumbs/6a7389e472.jpg +0 -0
- package/kb/references/thumbs/6a9b041e02.jpg +0 -0
- package/kb/references/thumbs/6ab2fa93ee.jpg +0 -0
- package/kb/references/thumbs/6ae3400319.jpg +0 -0
- package/kb/references/thumbs/6b21344bf3.jpg +0 -0
- package/kb/references/thumbs/6bd1b67a8a.jpg +0 -0
- package/kb/references/thumbs/6c99156c4f.jpg +0 -0
- package/kb/references/thumbs/6cc9b65384.jpg +0 -0
- package/kb/references/thumbs/6d15830a73.jpg +0 -0
- package/kb/references/thumbs/6d4c33d180.jpg +0 -0
- package/kb/references/thumbs/6e36815799.jpg +0 -0
- package/kb/references/thumbs/6eddb9cbfc.jpg +0 -0
- package/kb/references/thumbs/6f97968a7c.jpg +0 -0
- package/kb/references/thumbs/6fa0716a7d.jpg +0 -0
- package/kb/references/thumbs/6facd57184.jpg +0 -0
- package/kb/references/thumbs/6fd57b785a.jpg +0 -0
- package/kb/references/thumbs/700b3cb185.jpg +0 -0
- package/kb/references/thumbs/71197443fa.jpg +0 -0
- package/kb/references/thumbs/72082bc9ee.jpg +0 -0
- package/kb/references/thumbs/72453db479.jpg +0 -0
- package/kb/references/thumbs/72cd64d500.jpg +0 -0
- package/kb/references/thumbs/72d1e75283.jpg +0 -0
- package/kb/references/thumbs/72e13f7f5b.jpg +0 -0
- package/kb/references/thumbs/7459f8e644.jpg +0 -0
- package/kb/references/thumbs/7470d55c79.jpg +0 -0
- package/kb/references/thumbs/74c468f02a.jpg +0 -0
- package/kb/references/thumbs/74fed6eb77.jpg +0 -0
- package/kb/references/thumbs/756e05080d.jpg +0 -0
- package/kb/references/thumbs/75df7e5f49.jpg +0 -0
- package/kb/references/thumbs/76226da6ef.jpg +0 -0
- package/kb/references/thumbs/76a34aa056.jpg +0 -0
- package/kb/references/thumbs/76c7076589.jpg +0 -0
- package/kb/references/thumbs/76cccc396c.jpg +0 -0
- package/kb/references/thumbs/774654789f.jpg +0 -0
- package/kb/references/thumbs/7746cc494d.jpg +0 -0
- package/kb/references/thumbs/7766e36aa3.jpg +0 -0
- package/kb/references/thumbs/78049331ef.jpg +0 -0
- package/kb/references/thumbs/78808a0ca5.jpg +0 -0
- package/kb/references/thumbs/7890b0a310.jpg +0 -0
- package/kb/references/thumbs/78911975e6.jpg +0 -0
- package/kb/references/thumbs/78d289d5a0.jpg +0 -0
- package/kb/references/thumbs/794126267e.jpg +0 -0
- package/kb/references/thumbs/7976eb9025.jpg +0 -0
- package/kb/references/thumbs/798519ec7c.jpg +0 -0
- package/kb/references/thumbs/7a6cc5eecc.jpg +0 -0
- package/kb/references/thumbs/7ac8a7cd4a.jpg +0 -0
- package/kb/references/thumbs/7b1341d61d.jpg +0 -0
- package/kb/references/thumbs/7b9c4031e3.jpg +0 -0
- package/kb/references/thumbs/7ba5ad3779.jpg +0 -0
- package/kb/references/thumbs/7be6eb2bd0.jpg +0 -0
- package/kb/references/thumbs/7c30864f5d.jpg +0 -0
- package/kb/references/thumbs/7c379b5e17.jpg +0 -0
- package/kb/references/thumbs/7c4050eb02.jpg +0 -0
- package/kb/references/thumbs/7ca47b3221.jpg +0 -0
- package/kb/references/thumbs/7d43516bd7.jpg +0 -0
- package/kb/references/thumbs/7da9dbb98a.jpg +0 -0
- package/kb/references/thumbs/7ddda8f57c.jpg +0 -0
- package/kb/references/thumbs/7ece6d215c.jpg +0 -0
- package/kb/references/thumbs/7eebf029de.jpg +0 -0
- package/kb/references/thumbs/7f45483c15.jpg +0 -0
- package/kb/references/thumbs/7fde06eaa5.jpg +0 -0
- package/kb/references/thumbs/80407b97e9.jpg +0 -0
- package/kb/references/thumbs/80f0a6cf4b.jpg +0 -0
- package/kb/references/thumbs/8118b451b8.jpg +0 -0
- package/kb/references/thumbs/816baed4a8.jpg +0 -0
- package/kb/references/thumbs/817d2d15d9.jpg +0 -0
- package/kb/references/thumbs/8260cb430d.jpg +0 -0
- package/kb/references/thumbs/827b562899.jpg +0 -0
- package/kb/references/thumbs/8293cf1e92.jpg +0 -0
- package/kb/references/thumbs/8294653169.jpg +0 -0
- package/kb/references/thumbs/83061f871f.jpg +0 -0
- package/kb/references/thumbs/833df778ca.jpg +0 -0
- package/kb/references/thumbs/83d3acaafc.jpg +0 -0
- package/kb/references/thumbs/844c6efeff.jpg +0 -0
- package/kb/references/thumbs/84563d482a.jpg +0 -0
- package/kb/references/thumbs/848082dd94.jpg +0 -0
- package/kb/references/thumbs/8494b1da94.jpg +0 -0
- package/kb/references/thumbs/84b71014be.jpg +0 -0
- package/kb/references/thumbs/84be4a5f3c.jpg +0 -0
- package/kb/references/thumbs/84fd0fd25a.jpg +0 -0
- package/kb/references/thumbs/853e488e22.jpg +0 -0
- package/kb/references/thumbs/858c91585d.jpg +0 -0
- package/kb/references/thumbs/85903e8fe9.jpg +0 -0
- package/kb/references/thumbs/86597d43fd.jpg +0 -0
- package/kb/references/thumbs/866eb99500.jpg +0 -0
- package/kb/references/thumbs/86ac050340.jpg +0 -0
- package/kb/references/thumbs/86afec7b64.jpg +0 -0
- package/kb/references/thumbs/87238127f5.jpg +0 -0
- package/kb/references/thumbs/87321df792.jpg +0 -0
- package/kb/references/thumbs/87460f70cd.jpg +0 -0
- package/kb/references/thumbs/8770dfeaec.jpg +0 -0
- package/kb/references/thumbs/8798451a8c.jpg +0 -0
- package/kb/references/thumbs/87da1f34a3.jpg +0 -0
- package/kb/references/thumbs/882cdf8c05.jpg +0 -0
- package/kb/references/thumbs/8839f4106f.jpg +0 -0
- package/kb/references/thumbs/8844455212.jpg +0 -0
- package/kb/references/thumbs/88abba0497.jpg +0 -0
- package/kb/references/thumbs/88b372435d.jpg +0 -0
- package/kb/references/thumbs/88bd4f35fa.jpg +0 -0
- package/kb/references/thumbs/88c71a075e.jpg +0 -0
- package/kb/references/thumbs/892e5f048e.jpg +0 -0
- package/kb/references/thumbs/893cc8e920.jpg +0 -0
- package/kb/references/thumbs/896c198814.jpg +0 -0
- package/kb/references/thumbs/8a8e22f756.jpg +0 -0
- package/kb/references/thumbs/8a9d8a35cb.jpg +0 -0
- package/kb/references/thumbs/8ab1d67fec.jpg +0 -0
- package/kb/references/thumbs/8ab201fe12.jpg +0 -0
- package/kb/references/thumbs/8ac372c102.jpg +0 -0
- package/kb/references/thumbs/8b15736d62.jpg +0 -0
- package/kb/references/thumbs/8b1d8d6a05.jpg +0 -0
- package/kb/references/thumbs/8bb6050e20.jpg +0 -0
- package/kb/references/thumbs/8c6c9d1577.jpg +0 -0
- package/kb/references/thumbs/8d337851e0.jpg +0 -0
- package/kb/references/thumbs/8d44b33cc5.jpg +0 -0
- package/kb/references/thumbs/8d4536ff3b.jpg +0 -0
- package/kb/references/thumbs/8d9b99454a.jpg +0 -0
- package/kb/references/thumbs/8dda2303ff.jpg +0 -0
- package/kb/references/thumbs/8dec722d62.jpg +0 -0
- package/kb/references/thumbs/8e0ea4ca74.jpg +0 -0
- package/kb/references/thumbs/8ebba84d69.jpg +0 -0
- package/kb/references/thumbs/8ef09140c0.jpg +0 -0
- package/kb/references/thumbs/8f2928a1b0.jpg +0 -0
- package/kb/references/thumbs/8f88f9ddba.jpg +0 -0
- package/kb/references/thumbs/8fa4451009.jpg +0 -0
- package/kb/references/thumbs/90109b0e02.jpg +0 -0
- package/kb/references/thumbs/90e854e5c9.jpg +0 -0
- package/kb/references/thumbs/914e79f893.jpg +0 -0
- package/kb/references/thumbs/9161369197.jpg +0 -0
- package/kb/references/thumbs/9165c87d6f.jpg +0 -0
- package/kb/references/thumbs/9193f6558a.jpg +0 -0
- package/kb/references/thumbs/91ac7df877.jpg +0 -0
- package/kb/references/thumbs/9216bd4931.jpg +0 -0
- package/kb/references/thumbs/922ae8a26a.jpg +0 -0
- package/kb/references/thumbs/92a70e6867.jpg +0 -0
- package/kb/references/thumbs/92c77ece22.jpg +0 -0
- package/kb/references/thumbs/92e5914fbf.jpg +0 -0
- package/kb/references/thumbs/92ee36419a.jpg +0 -0
- package/kb/references/thumbs/94153a60b0.jpg +0 -0
- package/kb/references/thumbs/9449666640.jpg +0 -0
- package/kb/references/thumbs/944be6a646.jpg +0 -0
- package/kb/references/thumbs/945831476e.jpg +0 -0
- package/kb/references/thumbs/94c1af82f4.jpg +0 -0
- package/kb/references/thumbs/9599d6d589.jpg +0 -0
- package/kb/references/thumbs/960710f4cf.jpg +0 -0
- package/kb/references/thumbs/9608f12d64.jpg +0 -0
- package/kb/references/thumbs/962dabfaa0.jpg +0 -0
- package/kb/references/thumbs/965a3a95c6.jpg +0 -0
- package/kb/references/thumbs/9672ed5ae4.jpg +0 -0
- package/kb/references/thumbs/96891ae9c1.jpg +0 -0
- package/kb/references/thumbs/96e1907c99.jpg +0 -0
- package/kb/references/thumbs/96f25b6578.jpg +0 -0
- package/kb/references/thumbs/97211df9ae.jpg +0 -0
- package/kb/references/thumbs/9769d763a5.jpg +0 -0
- package/kb/references/thumbs/9792bd6d05.jpg +0 -0
- package/kb/references/thumbs/97d2837e3e.jpg +0 -0
- package/kb/references/thumbs/97d90d1d85.jpg +0 -0
- package/kb/references/thumbs/97fcd5774a.jpg +0 -0
- package/kb/references/thumbs/980f68564e.jpg +0 -0
- package/kb/references/thumbs/98511fb393.jpg +0 -0
- package/kb/references/thumbs/98f8fa694d.jpg +0 -0
- package/kb/references/thumbs/9a42c6bb97.jpg +0 -0
- package/kb/references/thumbs/9ab3600a06.jpg +0 -0
- package/kb/references/thumbs/9ab48d9130.jpg +0 -0
- package/kb/references/thumbs/9ad519197d.jpg +0 -0
- package/kb/references/thumbs/9b1382c657.jpg +0 -0
- package/kb/references/thumbs/9b6cc1e077.jpg +0 -0
- package/kb/references/thumbs/9beede8480.jpg +0 -0
- package/kb/references/thumbs/9bf8976952.jpg +0 -0
- package/kb/references/thumbs/9cace7b75a.jpg +0 -0
- package/kb/references/thumbs/9cdcc5745e.jpg +0 -0
- package/kb/references/thumbs/9d0b269074.jpg +0 -0
- package/kb/references/thumbs/9d41788b48.jpg +0 -0
- package/kb/references/thumbs/9d475bd6af.jpg +0 -0
- package/kb/references/thumbs/9e6bc543d0.jpg +0 -0
- package/kb/references/thumbs/9ed0e0a206.jpg +0 -0
- package/kb/references/thumbs/9ef538de13.jpg +0 -0
- package/kb/references/thumbs/9efc373ab4.jpg +0 -0
- package/kb/references/thumbs/9f4a939fa5.jpg +0 -0
- package/kb/references/thumbs/9f8d12d7b9.jpg +0 -0
- package/kb/references/thumbs/9fd5e3efa7.jpg +0 -0
- package/kb/references/thumbs/a0a9b9c572.jpg +0 -0
- package/kb/references/thumbs/a29ca9b185.jpg +0 -0
- package/kb/references/thumbs/a2a42884af.jpg +0 -0
- package/kb/references/thumbs/a2f5064e34.jpg +0 -0
- package/kb/references/thumbs/a3112ce672.jpg +0 -0
- package/kb/references/thumbs/a3437736d1.jpg +0 -0
- package/kb/references/thumbs/a372667e76.jpg +0 -0
- package/kb/references/thumbs/a39bae94e9.jpg +0 -0
- package/kb/references/thumbs/a3fc75d94c.jpg +0 -0
- package/kb/references/thumbs/a440487631.jpg +0 -0
- package/kb/references/thumbs/a4993d5fb5.jpg +0 -0
- package/kb/references/thumbs/a500476a86.jpg +0 -0
- package/kb/references/thumbs/a55506bf46.jpg +0 -0
- package/kb/references/thumbs/a59a5f9843.jpg +0 -0
- package/kb/references/thumbs/a5bce0eede.jpg +0 -0
- package/kb/references/thumbs/a5d921e1f0.jpg +0 -0
- package/kb/references/thumbs/a5e19d4637.jpg +0 -0
- package/kb/references/thumbs/a5f92b97d5.jpg +0 -0
- package/kb/references/thumbs/a6562c210a.jpg +0 -0
- package/kb/references/thumbs/a6f61a8d09.jpg +0 -0
- package/kb/references/thumbs/a719fdf663.jpg +0 -0
- package/kb/references/thumbs/a724e5442f.jpg +0 -0
- package/kb/references/thumbs/a852b4319f.jpg +0 -0
- package/kb/references/thumbs/a896c08448.jpg +0 -0
- package/kb/references/thumbs/a8d190a4b8.jpg +0 -0
- package/kb/references/thumbs/a8dcdd57d7.jpg +0 -0
- package/kb/references/thumbs/a951347e18.jpg +0 -0
- package/kb/references/thumbs/a9a1a0bf7d.jpg +0 -0
- package/kb/references/thumbs/a9b72986a8.jpg +0 -0
- package/kb/references/thumbs/aa11555ba8.jpg +0 -0
- package/kb/references/thumbs/aa4aab9093.jpg +0 -0
- package/kb/references/thumbs/aa89b96658.jpg +0 -0
- package/kb/references/thumbs/aaeb3739b6.jpg +0 -0
- package/kb/references/thumbs/ab25a608ec.jpg +0 -0
- package/kb/references/thumbs/ab34b62268.jpg +0 -0
- package/kb/references/thumbs/ab3b0217bb.jpg +0 -0
- package/kb/references/thumbs/ac70c04afb.jpg +0 -0
- package/kb/references/thumbs/ace0879117.jpg +0 -0
- package/kb/references/thumbs/ad0515ae55.jpg +0 -0
- package/kb/references/thumbs/ad66b25b47.jpg +0 -0
- package/kb/references/thumbs/ad68229d2f.jpg +0 -0
- package/kb/references/thumbs/add6480693.jpg +0 -0
- package/kb/references/thumbs/ae5b8c3b8c.jpg +0 -0
- package/kb/references/thumbs/ae81247b47.jpg +0 -0
- package/kb/references/thumbs/af8aa54379.jpg +0 -0
- package/kb/references/thumbs/afa80dedd4.jpg +0 -0
- package/kb/references/thumbs/afe04d730f.jpg +0 -0
- package/kb/references/thumbs/b09a7dc315.jpg +0 -0
- package/kb/references/thumbs/b0c02629f6.jpg +0 -0
- package/kb/references/thumbs/b1cb4f91de.jpg +0 -0
- package/kb/references/thumbs/b1d4c13c92.jpg +0 -0
- package/kb/references/thumbs/b20eef86db.jpg +0 -0
- package/kb/references/thumbs/b3136ccdde.jpg +0 -0
- package/kb/references/thumbs/b3f5e8d7dd.jpg +0 -0
- package/kb/references/thumbs/b44adb81c9.jpg +0 -0
- package/kb/references/thumbs/b457a5894b.jpg +0 -0
- package/kb/references/thumbs/b461281e0f.jpg +0 -0
- package/kb/references/thumbs/b4942644f0.jpg +0 -0
- package/kb/references/thumbs/b49f8eccad.jpg +0 -0
- package/kb/references/thumbs/b56c69be23.jpg +0 -0
- package/kb/references/thumbs/b59786b33c.jpg +0 -0
- package/kb/references/thumbs/b5d368ce5a.jpg +0 -0
- package/kb/references/thumbs/b5eb442406.jpg +0 -0
- package/kb/references/thumbs/b7fdabf4ab.jpg +0 -0
- package/kb/references/thumbs/b88ee8d235.jpg +0 -0
- package/kb/references/thumbs/b8a4e5be8a.jpg +0 -0
- package/kb/references/thumbs/b8c85b661c.jpg +0 -0
- package/kb/references/thumbs/ba1b8e7435.jpg +0 -0
- package/kb/references/thumbs/ba9a593eed.jpg +0 -0
- package/kb/references/thumbs/baa7afc201.jpg +0 -0
- package/kb/references/thumbs/baf74398f7.jpg +0 -0
- package/kb/references/thumbs/bb3e947c10.jpg +0 -0
- package/kb/references/thumbs/bb4c1bb7c1.jpg +0 -0
- package/kb/references/thumbs/bbaa25cc8a.jpg +0 -0
- package/kb/references/thumbs/bc7e7f88cc.jpg +0 -0
- package/kb/references/thumbs/bc9d5b58f5.jpg +0 -0
- package/kb/references/thumbs/bcc99a51f7.jpg +0 -0
- package/kb/references/thumbs/bce13dd1c1.jpg +0 -0
- package/kb/references/thumbs/bd079a6130.jpg +0 -0
- package/kb/references/thumbs/bd2d70dda7.jpg +0 -0
- package/kb/references/thumbs/bd5895c5f2.jpg +0 -0
- package/kb/references/thumbs/bde8e31d62.jpg +0 -0
- package/kb/references/thumbs/be084e78f3.jpg +0 -0
- package/kb/references/thumbs/be94f170c8.jpg +0 -0
- package/kb/references/thumbs/bed33654f7.jpg +0 -0
- package/kb/references/thumbs/beeb9a0c18.jpg +0 -0
- package/kb/references/thumbs/bef42094dc.jpg +0 -0
- package/kb/references/thumbs/bf625496fa.jpg +0 -0
- package/kb/references/thumbs/bf771f1398.jpg +0 -0
- package/kb/references/thumbs/c0ddefa3d9.jpg +0 -0
- package/kb/references/thumbs/c0f01e536e.jpg +0 -0
- package/kb/references/thumbs/c1d592b678.jpg +0 -0
- package/kb/references/thumbs/c1e83e1b3e.jpg +0 -0
- package/kb/references/thumbs/c2168f8096.jpg +0 -0
- package/kb/references/thumbs/c249cd6b17.jpg +0 -0
- package/kb/references/thumbs/c2e3d4feed.jpg +0 -0
- package/kb/references/thumbs/c3cec01df1.jpg +0 -0
- package/kb/references/thumbs/c47bedb42d.jpg +0 -0
- package/kb/references/thumbs/c4b03b4680.jpg +0 -0
- package/kb/references/thumbs/c4e6d18ec3.jpg +0 -0
- package/kb/references/thumbs/c5477e2877.jpg +0 -0
- package/kb/references/thumbs/c566794674.jpg +0 -0
- package/kb/references/thumbs/c5b945afbb.jpg +0 -0
- package/kb/references/thumbs/c5e4659497.jpg +0 -0
- package/kb/references/thumbs/c622786702.jpg +0 -0
- package/kb/references/thumbs/c6250649ca.jpg +0 -0
- package/kb/references/thumbs/c6261a9526.jpg +0 -0
- package/kb/references/thumbs/c62e609076.jpg +0 -0
- package/kb/references/thumbs/c6602d3e85.jpg +0 -0
- package/kb/references/thumbs/c6c1a16e40.jpg +0 -0
- package/kb/references/thumbs/c77f932157.jpg +0 -0
- package/kb/references/thumbs/c79788f01e.jpg +0 -0
- package/kb/references/thumbs/c7a511ad1e.jpg +0 -0
- package/kb/references/thumbs/c7acfbc3c8.jpg +0 -0
- package/kb/references/thumbs/c7bb6d1bb8.jpg +0 -0
- package/kb/references/thumbs/c829eadcb9.jpg +0 -0
- package/kb/references/thumbs/c891fd9d85.jpg +0 -0
- package/kb/references/thumbs/c89f812ee3.jpg +0 -0
- package/kb/references/thumbs/c8a85b9f61.jpg +0 -0
- package/kb/references/thumbs/c8fdf85c9a.jpg +0 -0
- package/kb/references/thumbs/c961ac1031.jpg +0 -0
- package/kb/references/thumbs/c9fd3f88d8.jpg +0 -0
- package/kb/references/thumbs/ca0d6399c3.jpg +0 -0
- package/kb/references/thumbs/ca316c83e4.jpg +0 -0
- package/kb/references/thumbs/ca3b93aa0d.jpg +0 -0
- package/kb/references/thumbs/cb0596a85b.jpg +0 -0
- package/kb/references/thumbs/cb95a5c3ef.jpg +0 -0
- package/kb/references/thumbs/cbe238b656.jpg +0 -0
- package/kb/references/thumbs/cbf530e608.jpg +0 -0
- package/kb/references/thumbs/cc173494ec.jpg +0 -0
- package/kb/references/thumbs/ccb664bddf.jpg +0 -0
- package/kb/references/thumbs/ccf69d36cd.jpg +0 -0
- package/kb/references/thumbs/ccf759db42.jpg +0 -0
- package/kb/references/thumbs/cd2a285807.jpg +0 -0
- package/kb/references/thumbs/cd4a24a8ca.jpg +0 -0
- package/kb/references/thumbs/cdb3fe8938.jpg +0 -0
- package/kb/references/thumbs/cdce1b9bc6.jpg +0 -0
- package/kb/references/thumbs/cde3aa761a.jpg +0 -0
- package/kb/references/thumbs/ce9d5cd9c2.jpg +0 -0
- package/kb/references/thumbs/ceb01f8a34.jpg +0 -0
- package/kb/references/thumbs/cee15c98d0.jpg +0 -0
- package/kb/references/thumbs/cf6944ddae.jpg +0 -0
- package/kb/references/thumbs/d15dd21cd8.jpg +0 -0
- package/kb/references/thumbs/d1633bf2ed.jpg +0 -0
- package/kb/references/thumbs/d16a838000.jpg +0 -0
- package/kb/references/thumbs/d1cf87e9f0.jpg +0 -0
- package/kb/references/thumbs/d32511d913.jpg +0 -0
- package/kb/references/thumbs/d327e9dedd.jpg +0 -0
- package/kb/references/thumbs/d35bf6c85e.jpg +0 -0
- package/kb/references/thumbs/d37afc9d61.jpg +0 -0
- package/kb/references/thumbs/d3b66655c7.jpg +0 -0
- package/kb/references/thumbs/d40b4172b6.jpg +0 -0
- package/kb/references/thumbs/d4c40d1824.jpg +0 -0
- package/kb/references/thumbs/d4cb55a4b6.jpg +0 -0
- package/kb/references/thumbs/d4f0c30f7e.jpg +0 -0
- package/kb/references/thumbs/d51cce3ae5.jpg +0 -0
- package/kb/references/thumbs/d52948f9ba.jpg +0 -0
- package/kb/references/thumbs/d62bd3cba4.jpg +0 -0
- package/kb/references/thumbs/d668a21c92.jpg +0 -0
- package/kb/references/thumbs/d685072c52.jpg +0 -0
- package/kb/references/thumbs/d6d7b96093.jpg +0 -0
- package/kb/references/thumbs/d7cd874b21.jpg +0 -0
- package/kb/references/thumbs/d7e111736a.jpg +0 -0
- package/kb/references/thumbs/d88325f832.jpg +0 -0
- package/kb/references/thumbs/d9272ded76.jpg +0 -0
- package/kb/references/thumbs/d962e7c654.jpg +0 -0
- package/kb/references/thumbs/d97f000ee2.jpg +0 -0
- package/kb/references/thumbs/d9c1ae2543.jpg +0 -0
- package/kb/references/thumbs/d9ccb3cac8.jpg +0 -0
- package/kb/references/thumbs/da99019680.jpg +0 -0
- package/kb/references/thumbs/da9b8bc615.jpg +0 -0
- package/kb/references/thumbs/daafbee2c1.jpg +0 -0
- package/kb/references/thumbs/db0f11f143.jpg +0 -0
- package/kb/references/thumbs/db5dd367f5.jpg +0 -0
- package/kb/references/thumbs/db69677866.jpg +0 -0
- package/kb/references/thumbs/db87c1956e.jpg +0 -0
- package/kb/references/thumbs/dbb86d8bda.jpg +0 -0
- package/kb/references/thumbs/dbd3a8ff2a.jpg +0 -0
- package/kb/references/thumbs/dbdf4b2794.jpg +0 -0
- package/kb/references/thumbs/dd4c19b4b1.jpg +0 -0
- package/kb/references/thumbs/dd98d9f6fa.jpg +0 -0
- package/kb/references/thumbs/ddb00e3b6a.jpg +0 -0
- package/kb/references/thumbs/dde3541a5c.jpg +0 -0
- package/kb/references/thumbs/de2a4da502.jpg +0 -0
- package/kb/references/thumbs/de4c387a66.jpg +0 -0
- package/kb/references/thumbs/de5618fa82.jpg +0 -0
- package/kb/references/thumbs/de6bec2538.jpg +0 -0
- package/kb/references/thumbs/dea13cbb1f.jpg +0 -0
- package/kb/references/thumbs/deff9202aa.jpg +0 -0
- package/kb/references/thumbs/df12835f8d.jpg +0 -0
- package/kb/references/thumbs/df57acbb3d.jpg +0 -0
- package/kb/references/thumbs/df8265009e.jpg +0 -0
- package/kb/references/thumbs/dfc99a1e8e.jpg +0 -0
- package/kb/references/thumbs/dfc9fde460.jpg +0 -0
- package/kb/references/thumbs/e038348eee.jpg +0 -0
- package/kb/references/thumbs/e04c2ae1d5.jpg +0 -0
- package/kb/references/thumbs/e070345c43.jpg +0 -0
- package/kb/references/thumbs/e0a0c84d47.jpg +0 -0
- package/kb/references/thumbs/e0af1e6b9e.jpg +0 -0
- package/kb/references/thumbs/e1025942c4.jpg +0 -0
- package/kb/references/thumbs/e11b6f5b82.jpg +0 -0
- package/kb/references/thumbs/e1553de3fc.jpg +0 -0
- package/kb/references/thumbs/e162ebe7cd.jpg +0 -0
- package/kb/references/thumbs/e1f1e531d8.jpg +0 -0
- package/kb/references/thumbs/e20842e5c9.jpg +0 -0
- package/kb/references/thumbs/e24e7d949b.jpg +0 -0
- package/kb/references/thumbs/e2a3e5d10a.jpg +0 -0
- package/kb/references/thumbs/e2de02615a.jpg +0 -0
- package/kb/references/thumbs/e305dad7dd.jpg +0 -0
- package/kb/references/thumbs/e52e3ef97f.jpg +0 -0
- package/kb/references/thumbs/e570e92d06.jpg +0 -0
- package/kb/references/thumbs/e583932fb9.jpg +0 -0
- package/kb/references/thumbs/e5da3c038f.jpg +0 -0
- package/kb/references/thumbs/e657634af3.jpg +0 -0
- package/kb/references/thumbs/e67946e3e1.jpg +0 -0
- package/kb/references/thumbs/e69e0f3639.jpg +0 -0
- package/kb/references/thumbs/e6ebe66031.jpg +0 -0
- package/kb/references/thumbs/e7db9563c9.jpg +0 -0
- package/kb/references/thumbs/e84a4c3b7b.jpg +0 -0
- package/kb/references/thumbs/e84cf52c27.jpg +0 -0
- package/kb/references/thumbs/e8707cf6e8.jpg +0 -0
- package/kb/references/thumbs/e888890b40.jpg +0 -0
- package/kb/references/thumbs/e8a502b418.jpg +0 -0
- package/kb/references/thumbs/e8ba68371d.jpg +0 -0
- package/kb/references/thumbs/e9098f54cc.jpg +0 -0
- package/kb/references/thumbs/e9144deae9.jpg +0 -0
- package/kb/references/thumbs/e93e98d757.jpg +0 -0
- package/kb/references/thumbs/e9762dd435.jpg +0 -0
- package/kb/references/thumbs/e9db4544c8.jpg +0 -0
- package/kb/references/thumbs/e9ddffeacd.jpg +0 -0
- package/kb/references/thumbs/e9e2cf1d7e.jpg +0 -0
- package/kb/references/thumbs/ea1e23e623.jpg +0 -0
- package/kb/references/thumbs/ea41200f5e.jpg +0 -0
- package/kb/references/thumbs/eaf4916e1a.jpg +0 -0
- package/kb/references/thumbs/eb2c505fc8.jpg +0 -0
- package/kb/references/thumbs/eb47943693.jpg +0 -0
- package/kb/references/thumbs/eb4ffd6625.jpg +0 -0
- package/kb/references/thumbs/eb82ac0a4d.jpg +0 -0
- package/kb/references/thumbs/ebeb345ade.jpg +0 -0
- package/kb/references/thumbs/ec4e2aba0a.jpg +0 -0
- package/kb/references/thumbs/ed683bc9f7.jpg +0 -0
- package/kb/references/thumbs/ed9e236a84.jpg +0 -0
- package/kb/references/thumbs/ee45e1caea.jpg +0 -0
- package/kb/references/thumbs/ee50bbf2e7.jpg +0 -0
- package/kb/references/thumbs/eed6ad3b7b.jpg +0 -0
- package/kb/references/thumbs/eee247fd70.jpg +0 -0
- package/kb/references/thumbs/ef87b6cb99.jpg +0 -0
- package/kb/references/thumbs/ef87dccf04.jpg +0 -0
- package/kb/references/thumbs/ef941bba1e.jpg +0 -0
- package/kb/references/thumbs/effc14fb2c.jpg +0 -0
- package/kb/references/thumbs/f04aa5a191.jpg +0 -0
- package/kb/references/thumbs/f13f12485f.jpg +0 -0
- package/kb/references/thumbs/f16a5c0fd4.jpg +0 -0
- package/kb/references/thumbs/f1ba7a7a8f.jpg +0 -0
- package/kb/references/thumbs/f1bc4c9c19.jpg +0 -0
- package/kb/references/thumbs/f1ee827878.jpg +0 -0
- package/kb/references/thumbs/f21736aeff.jpg +0 -0
- package/kb/references/thumbs/f22bc41213.jpg +0 -0
- package/kb/references/thumbs/f266aaffcc.jpg +0 -0
- package/kb/references/thumbs/f2c0ed0d65.jpg +0 -0
- package/kb/references/thumbs/f32ac710fd.jpg +0 -0
- package/kb/references/thumbs/f32b697ff6.jpg +0 -0
- package/kb/references/thumbs/f39c883904.jpg +0 -0
- package/kb/references/thumbs/f3b9d55e6e.jpg +0 -0
- package/kb/references/thumbs/f3c1763e14.jpg +0 -0
- package/kb/references/thumbs/f40853fd43.jpg +0 -0
- package/kb/references/thumbs/f4fd07dc4d.jpg +0 -0
- package/kb/references/thumbs/f50b756ee5.jpg +0 -0
- package/kb/references/thumbs/f51272e9b3.jpg +0 -0
- package/kb/references/thumbs/f538895eee.jpg +0 -0
- package/kb/references/thumbs/f5d28081b5.jpg +0 -0
- package/kb/references/thumbs/f6046c9501.jpg +0 -0
- package/kb/references/thumbs/f62e4af316.jpg +0 -0
- package/kb/references/thumbs/f6f6bffeb8.jpg +0 -0
- package/kb/references/thumbs/f736e00af6.jpg +0 -0
- package/kb/references/thumbs/f7932da47d.jpg +0 -0
- package/kb/references/thumbs/f879e118ca.jpg +0 -0
- package/kb/references/thumbs/f88257215d.jpg +0 -0
- package/kb/references/thumbs/f88c45a6d7.jpg +0 -0
- package/kb/references/thumbs/f89a7b646e.jpg +0 -0
- package/kb/references/thumbs/f8a1e7a274.jpg +0 -0
- package/kb/references/thumbs/f9183cf2b6.jpg +0 -0
- package/kb/references/thumbs/f995de5ce9.jpg +0 -0
- package/kb/references/thumbs/f9ada2c3e1.jpg +0 -0
- package/kb/references/thumbs/f9d4616f89.jpg +0 -0
- package/kb/references/thumbs/f9f4307bb0.jpg +0 -0
- package/kb/references/thumbs/fa070122c7.jpg +0 -0
- package/kb/references/thumbs/fa29cc1369.jpg +0 -0
- package/kb/references/thumbs/fa791a4dab.jpg +0 -0
- package/kb/references/thumbs/fa8060509e.jpg +0 -0
- package/kb/references/thumbs/fafeed4003.jpg +0 -0
- package/kb/references/thumbs/fb1c024f38.jpg +0 -0
- package/kb/references/thumbs/fb77aa28b3.jpg +0 -0
- package/kb/references/thumbs/fb9f7f1966.jpg +0 -0
- package/kb/references/thumbs/fba8a8c2da.jpg +0 -0
- package/kb/references/thumbs/fce2754c36.jpg +0 -0
- package/kb/references/thumbs/fce2fb83df.jpg +0 -0
- package/kb/references/thumbs/fd4c51bb47.jpg +0 -0
- package/kb/references/thumbs/fd8c269817.jpg +0 -0
- package/kb/references/thumbs/fdb7b250ca.jpg +0 -0
- package/kb/references/thumbs/fe18088de8.jpg +0 -0
- package/kb/references/thumbs/fe4f742ba7.jpg +0 -0
- package/kb/references/thumbs/fe64742ce7.jpg +0 -0
- package/kb/references/thumbs/feb5d62161.jpg +0 -0
- package/kb/references/thumbs/fed21b3e98.jpg +0 -0
- package/kb/references/thumbs/fed2205951.jpg +0 -0
- package/kb/references/thumbs/ffdacf1715.jpg +0 -0
- package/kb/sections/_buttons.md +93 -0
- package/kb/sections/_finish.md +325 -0
- package/kb/sections/about-founder-note.md +85 -0
- package/kb/sections/about-team-roster.md +86 -0
- package/kb/sections/alternating-rows-live-tiles.md +110 -0
- package/kb/sections/annotated-product-shot.md +105 -0
- package/kb/sections/asymmetric-bento-dominant.md +114 -0
- package/kb/sections/before-after-features.md +104 -0
- package/kb/sections/before-after-repair.md +107 -0
- package/kb/sections/bento-lead-tile.md +112 -0
- package/kb/sections/book-a-slot-honest.md +116 -0
- package/kb/sections/capability-prompt-ledger.md +68 -0
- package/kb/sections/case-study-band.md +113 -0
- package/kb/sections/centred-stack-hero.md +107 -0
- package/kb/sections/closing-demo-final-state.md +81 -0
- package/kb/sections/closing-full-bleed-line-and-form.md +86 -0
- package/kb/sections/closing-result-previewed.md +88 -0
- package/kb/sections/closing-three-real-steps.md +87 -0
- package/kb/sections/command-reference-table.md +70 -0
- package/kb/sections/comparison-old-way-bars.md +88 -0
- package/kb/sections/comparison-same-task-two-ways.md +88 -0
- package/kb/sections/day-of-the-place.md +102 -0
- package/kb/sections/docs-reading-rail.md +88 -0
- package/kb/sections/editorial-columns-hero.md +107 -0
- package/kb/sections/editorial-essay-pull-quote.md +112 -0
- package/kb/sections/events-calendar-list.md +107 -0
- package/kb/sections/explorable-control-demo.md +102 -0
- package/kb/sections/faq-open-answers-editorial.md +85 -0
- package/kb/sections/faq-ruled-accordion-aside.md +87 -0
- package/kb/sections/footer-closing-scene.md +84 -0
- package/kb/sections/footer-editorial-sitemap.md +85 -0
- package/kb/sections/footer-minimal-credits.md +80 -0
- package/kb/sections/full-bleed-image-band.md +103 -0
- package/kb/sections/full-bleed-image-hero.md +105 -0
- package/kb/sections/gallery-first-hero.md +109 -0
- package/kb/sections/horizontal-scroll-strip.md +101 -0
- package/kb/sections/how-i-work-own-voice.md +111 -0
- package/kb/sections/how-it-works-in-place.md +109 -0
- package/kb/sections/impact-numbers-sourced.md +109 -0
- package/kb/sections/install-steps-per-agent.md +77 -0
- package/kb/sections/masonry-real-work.md +109 -0
- package/kb/sections/numbered-editorial-columns.md +105 -0
- package/kb/sections/object-first-hero.md +106 -0
- package/kb/sections/object-timeline.md +105 -0
- package/kb/sections/one-huge-number.md +100 -0
- package/kb/sections/one-person-story.md +103 -0
- package/kb/sections/order-ahead-ticket.md +119 -0
- package/kb/sections/press-strip-quoted.md +106 -0
- package/kb/sections/pricing-comparison-table-sticky.md +94 -0
- package/kb/sections/pricing-free-pro-upgrade-moment.md +85 -0
- package/kb/sections/pricing-plan-beside-product.md +88 -0
- package/kb/sections/pricing-plans-ledger.md +94 -0
- package/kb/sections/pricing-usage-calculator.md +93 -0
- package/kb/sections/printed-menu-card.md +110 -0
- package/kb/sections/process-happening.md +102 -0
- package/kb/sections/project-index-ruled.md +106 -0
- package/kb/sections/proof-logo-cloud-with-reasons.md +82 -0
- package/kb/sections/proof-measured-numbers.md +88 -0
- package/kb/sections/proof-output-wall.md +84 -0
- package/kb/sections/proof-single-honest-quote.md +81 -0
- package/kb/sections/resources-searchable-list.md +110 -0
- package/kb/sections/rooms-and-rates.md +107 -0
- package/kb/sections/ruled-facts-table.md +108 -0
- package/kb/sections/ruled-list-pinned-visual.md +107 -0
- package/kb/sections/scroll-scrubbed-product-demo.md +103 -0
- package/kb/sections/self-playing-run-demo.md +104 -0
- package/kb/sections/services-price-ledger.md +106 -0
- package/kb/sections/signup-form-with-next-steps.md +86 -0
- package/kb/sections/signup-waitlist-place-in-line.md +90 -0
- package/kb/sections/spec-sheet-features.md +108 -0
- package/kb/sections/split-hero-live-object.md +108 -0
- package/kb/sections/sticky-feature-narrative.md +104 -0
- package/kb/sections/todays-board-hero.md +112 -0
- package/kb/sections/touchable-tool-hero.md +111 -0
- package/kb/sections/typographic-statement-hero.md +99 -0
- package/kb/sections/visit-hours-map.md +110 -0
- package/kb/sections/ways-to-help-honest.md +115 -0
- package/kb/sources/design-reference.md +991 -0
- package/kb/sources/product-and-docs.md +37 -0
- package/kb/systems/1win/DESIGN.md +463 -0
- package/kb/systems/LICENSE-awesome-design-md +21 -0
- package/kb/systems/README.md +7 -0
- package/kb/systems/airbnb/DESIGN.md +545 -0
- package/kb/systems/airtable/DESIGN.md +554 -0
- package/kb/systems/aljazeera/DESIGN.md +594 -0
- package/kb/systems/apple/DESIGN.md +562 -0
- package/kb/systems/binance/DESIGN.md +634 -0
- package/kb/systems/bmw/DESIGN.md +544 -0
- package/kb/systems/bmw-m/DESIGN.md +503 -0
- package/kb/systems/bugatti/DESIGN.md +454 -0
- package/kb/systems/cal/DESIGN.md +542 -0
- package/kb/systems/categories.json +87 -0
- package/kb/systems/claude/DESIGN.md +589 -0
- package/kb/systems/clay/DESIGN.md +541 -0
- package/kb/systems/clickhouse/DESIGN.md +544 -0
- package/kb/systems/cohere/DESIGN.md +451 -0
- package/kb/systems/coinbase/DESIGN.md +570 -0
- package/kb/systems/composio/DESIGN.md +506 -0
- package/kb/systems/cursor/DESIGN.md +537 -0
- package/kb/systems/dell-1996/DESIGN.md +632 -0
- package/kb/systems/dji/DESIGN.md +882 -0
- package/kb/systems/elevenlabs/DESIGN.md +504 -0
- package/kb/systems/expo/DESIGN.md +526 -0
- package/kb/systems/ferrari/DESIGN.md +531 -0
- package/kb/systems/figma/DESIGN.md +578 -0
- package/kb/systems/framer/DESIGN.md +544 -0
- package/kb/systems/hashicorp/DESIGN.md +575 -0
- package/kb/systems/hp/DESIGN.md +670 -0
- package/kb/systems/ibm/DESIGN.md +550 -0
- package/kb/systems/intercom/DESIGN.md +546 -0
- package/kb/systems/jobright/DESIGN.md +525 -0
- package/kb/systems/kraken/DESIGN.md +125 -0
- package/kb/systems/lamborghini/DESIGN.md +288 -0
- package/kb/systems/linear.app/DESIGN.md +548 -0
- package/kb/systems/lovable/DESIGN.md +298 -0
- package/kb/systems/mastercard/DESIGN.md +365 -0
- package/kb/systems/mercury/DESIGN.md +568 -0
- package/kb/systems/meta/DESIGN.md +683 -0
- package/kb/systems/minimax/DESIGN.md +746 -0
- package/kb/systems/mintlify/DESIGN.md +852 -0
- package/kb/systems/miro/DESIGN.md +825 -0
- package/kb/systems/mistral.ai/DESIGN.md +773 -0
- package/kb/systems/mongodb/DESIGN.md +767 -0
- package/kb/systems/mydealz/DESIGN.md +551 -0
- package/kb/systems/nerdwallet/DESIGN.md +722 -0
- package/kb/systems/nike/DESIGN.md +575 -0
- package/kb/systems/nintendo-2001/DESIGN.md +649 -0
- package/kb/systems/notion/DESIGN.md +821 -0
- package/kb/systems/nvidia/DESIGN.md +640 -0
- package/kb/systems/ollama/DESIGN.md +539 -0
- package/kb/systems/opencode.ai/DESIGN.md +521 -0
- package/kb/systems/oracle/DESIGN.md +778 -0
- package/kb/systems/oura/DESIGN.md +616 -0
- package/kb/systems/pinterest/DESIGN.md +597 -0
- package/kb/systems/playstation/DESIGN.md +661 -0
- package/kb/systems/posthog/DESIGN.md +690 -0
- package/kb/systems/raycast/DESIGN.md +669 -0
- package/kb/systems/renault/DESIGN.md +589 -0
- package/kb/systems/replicate/DESIGN.md +616 -0
- package/kb/systems/resend/DESIGN.md +585 -0
- package/kb/systems/revolut/DESIGN.md +636 -0
- package/kb/systems/runwayml/DESIGN.md +244 -0
- package/kb/systems/sanity/DESIGN.md +357 -0
- package/kb/systems/sap/DESIGN.md +639 -0
- package/kb/systems/sentry/DESIGN.md +551 -0
- package/kb/systems/shopify/DESIGN.md +516 -0
- package/kb/systems/slack/DESIGN.md +482 -0
- package/kb/systems/spacex/DESIGN.md +363 -0
- package/kb/systems/spotify/DESIGN.md +246 -0
- package/kb/systems/starbucks/DESIGN.md +580 -0
- package/kb/systems/stripe/DESIGN.md +487 -0
- package/kb/systems/supabase/DESIGN.md +462 -0
- package/kb/systems/superhuman/DESIGN.md +448 -0
- package/kb/systems/tesla/DESIGN.md +286 -0
- package/kb/systems/theverge/DESIGN.md +339 -0
- package/kb/systems/together.ai/DESIGN.md +633 -0
- package/kb/systems/uber/DESIGN.md +636 -0
- package/kb/systems/vercel/DESIGN.md +736 -0
- package/kb/systems/vodafone/DESIGN.md +538 -0
- package/kb/systems/voltagent/DESIGN.md +521 -0
- package/kb/systems/warp/DESIGN.md +526 -0
- package/kb/systems/webflow/DESIGN.md +588 -0
- package/kb/systems/wired/DESIGN.md +497 -0
- package/kb/systems/wise/DESIGN.md +544 -0
- package/kb/systems/x.ai/DESIGN.md +465 -0
- package/kb/systems/zapier/DESIGN.md +537 -0
- package/kb/taste/garvit-by-job.md +46 -0
- package/kb/taste/garvit-portfolio.md +94 -0
- package/kb/universal/color-roles.md +26 -0
- package/kb/universal/copy.md +16 -0
- package/kb/universal/details.md +31 -0
- package/kb/universal/first-screen.md +30 -0
- package/kb/universal/fit-the-codebase.md +29 -0
- package/kb/universal/layout-width.md +28 -0
- package/kb/universal/motion-feedback.md +23 -0
- package/kb/universal/signature.md +29 -0
- package/kb/universal/states.md +17 -0
- package/kb/universal/type-app.md +33 -0
- package/kb/universal/type-marketing.md +28 -0
- package/package.json +37 -4
- package/scripts/pack-assets.mjs +58 -0
- package/skill/palate/SKILL.md +261 -0
- package/src/auth-recheck.mjs +4 -0
- package/src/auth.mjs +416 -0
- package/src/capture.mjs +182 -0
- package/src/catalog/classify.mjs +96 -0
- package/src/catalog/curated.mjs +128 -0
- package/src/catalog/index-build.mjs +67 -0
- package/src/catalog/literal.mjs +146 -0
- package/src/catalog/store.mjs +40 -0
- package/src/catalog/vibrant.mjs +126 -0
- package/src/check.mjs +93 -0
- package/src/concept.mjs +157 -0
- package/src/context.mjs +226 -0
- package/src/copy.mjs +188 -0
- package/src/devserver.mjs +135 -0
- package/src/fontgenre.mjs +44 -0
- package/src/guard-agents.mjs +213 -0
- package/src/guard.mjs +377 -0
- package/src/kb.mjs +91 -0
- package/src/look.mjs +312 -0
- package/src/loop/ambition.mjs +620 -0
- package/src/loop/animate.mjs +70 -0
- package/src/loop/artdirection.mjs +264 -0
- package/src/loop/bench.mjs +184 -0
- package/src/loop/benchpick.mjs +155 -0
- package/src/loop/blueprint.mjs +620 -0
- package/src/loop/board.html +180 -0
- package/src/loop/build.mjs +393 -0
- package/src/loop/buttons.mjs +413 -0
- package/src/loop/common.mjs +206 -0
- package/src/loop/cost.mjs +63 -0
- package/src/loop/craft.mjs +152 -0
- package/src/loop/craftchecks.mjs +148 -0
- package/src/loop/critique.mjs +393 -0
- package/src/loop/details.mjs +225 -0
- package/src/loop/direction.html +168 -0
- package/src/loop/direction.mjs +256 -0
- package/src/loop/directions.json +8 -0
- package/src/loop/explore.mjs +219 -0
- package/src/loop/fail.mjs +110 -0
- package/src/loop/fix.mjs +194 -0
- package/src/loop/floor.mjs +677 -0
- package/src/loop/forget.mjs +52 -0
- package/src/loop/gate.mjs +1053 -0
- package/src/loop/grid.html +123 -0
- package/src/loop/growth.mjs +118 -0
- package/src/loop/icons.mjs +109 -0
- package/src/loop/imagery.mjs +1280 -0
- package/src/loop/judge-api.mjs +245 -0
- package/src/loop/judge.mjs +167 -0
- package/src/loop/layouts.mjs +492 -0
- package/src/loop/library.mjs +82 -0
- package/src/loop/lookplan.mjs +182 -0
- package/src/loop/lookvec.mjs +645 -0
- package/src/loop/match.mjs +923 -0
- package/src/loop/matched.mjs +26 -0
- package/src/loop/myrefs.mjs +151 -0
- package/src/loop/pick.mjs +213 -0
- package/src/loop/picker.html +118 -0
- package/src/loop/plan.mjs +289 -0
- package/src/loop/polish.mjs +39 -0
- package/src/loop/research-learn.mjs +41 -0
- package/src/loop/research.mjs +1130 -0
- package/src/loop/rulereview.mjs +146 -0
- package/src/loop/rules-board.html +199 -0
- package/src/loop/rules.mjs +939 -0
- package/src/loop/similar.mjs +276 -0
- package/src/loop/states-source.mjs +258 -0
- package/src/loop/states.mjs +1547 -0
- package/src/loop/stats.mjs +78 -0
- package/src/loop/taste.mjs +81 -0
- package/src/loop/timeline.mjs +149 -0
- package/src/loop/variants.mjs +228 -0
- package/src/loop/vary.mjs +249 -0
- package/src/mcp/server.mjs +1246 -0
- package/src/motion.mjs +207 -0
- package/src/moves.mjs +242 -0
- package/src/novelty.mjs +116 -0
- package/src/page-ambition.js +181 -0
- package/src/page-craft.js +724 -0
- package/src/page-details.js +415 -0
- package/src/page-devices.js +365 -0
- package/src/page-fingerprint.js +281 -0
- package/src/page-gate.js +1307 -0
- package/src/page-look.js +698 -0
- package/src/page-metrics.js +78 -0
- package/src/page-principles.js +1167 -0
- package/src/page-rules.js +308 -0
- package/src/page-sections.js +211 -0
- package/src/page-states.js +703 -0
- package/src/paths.mjs +13 -0
- package/src/png.mjs +107 -0
- package/src/point/auto.mjs +224 -0
- package/src/point/locate.mjs +114 -0
- package/src/point/overlay.js +1516 -0
- package/src/point/server.mjs +1122 -0
- package/src/point/trail.mjs +219 -0
- package/src/pool.mjs +80 -0
- package/src/principles.mjs +279 -0
- package/src/refs.mjs +299 -0
- package/src/robots.mjs +145 -0
- package/src/sections.mjs +210 -0
- package/src/shoot.mjs +235 -0
- package/src/systems/apply.mjs +355 -0
- package/src/systems/load.mjs +251 -0
- package/src/systems/pick.mjs +213 -0
- package/templates/vite-react-tw/index.html +12 -0
- package/templates/vite-react-tw/package.json +25 -0
- package/templates/vite-react-tw/src/App.tsx +3 -0
- package/templates/vite-react-tw/src/index.css +1 -0
- package/templates/vite-react-tw/src/main.tsx +10 -0
- package/templates/vite-react-tw/tsconfig.app.json +26 -0
- package/templates/vite-react-tw/tsconfig.json +7 -0
- package/templates/vite-react-tw/tsconfig.node.json +23 -0
- package/templates/vite-react-tw/vite.config.ts +8 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: hero-paints-itself-in
|
|
3
|
+
name: The hero paints itself in
|
|
4
|
+
kind: hero
|
|
5
|
+
fits: [calm, crafted, heritage, nature, artsy, premium, editorial, cinematic, launch]
|
|
6
|
+
avoid: [data-dense-tool, finance-trust-first, enterprise-compliance, low-bandwidth, daily-tool, playful-kids]
|
|
7
|
+
signature: true
|
|
8
|
+
effort: l
|
|
9
|
+
perf: "inline script, no framework wait; one small 3-channel PNG (the engraving) fetched with high priority; canvas drawImage per frame for ~2.3 s, then the canvas is freed; the finished image stays the LCP element underneath"
|
|
10
|
+
a11y: "decorative canvas (aria-hidden); runs once per session; skipped under reduced motion, without JS, on anchor links and on slow loads; headline stays real text throughout"
|
|
11
|
+
pairs_with: [line-engraving-from-image, museum-painting-backdrop, canvas-grain, engraving-colour-lens]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
On the first view in a session the hero starts as blank paper; an engraving of the hero picture is drawn onto it like a pen at work (contours, then the long hatch, then crosshatch in the shadows), and a broad brush then wipes the engraving away to the painting in full colour underneath. About 2.3 seconds, once per session, never in the way of reading.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- It shows *making*, not a fade. People read pen strokes and a brush as human craft, so the page feels authored rather than generated.
|
|
22
|
+
- It enacts the product's story in one gesture: line art becomes the finished, coloured thing ("the last 20%"). A hero animation that carries the brand's idea is remembered; one that is only decoration is skipped.
|
|
23
|
+
- It is short and runs once: the visitor sees it, it pays off, and on every later view the page is simply the finished painting.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use when the hero is a picture (a CC0 painting, a commissioned illustration, your own photograph), the brand is calm or crafted, and the product's idea is about finishing, restoring, revealing or bringing to life. It needs a picture with strong shapes (horizon, trees, figures) so the engraving reads.
|
|
28
|
+
|
|
29
|
+
Not for: dashboards and tools people open daily (never animate the entry to a daily tool), trust-first finance or compliance pages, pages whose hero must show the product UI at once, or audiences on slow connections (the move stands down there anyway, so it would be wasted effort).
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Assets.** Engrave the hero picture with `line-engraving-from-image`, cropped to the part the hero shows at desktop and at phone width (two files). Pack the three passes into one small PNG: red channel = contours, green = the long hatch, blue = the crosshatch. One ink colour is applied at runtime. Keep each file well under 100 KB.
|
|
34
|
+
2. **Markup.** The hero panel holds, in order: the finished image (`next/image` with `fill`, `priority`, `object-cover`, a known `object-position`), a paper div (`.hero-draft`, `display:none` by default, `position:absolute; inset:0`), a canvas (`.hero-paint`, `display:none`, `aria-hidden`, `suppressHydrationWarning`), the grain, the readability wash, and the content. Without the script nothing extra shows: the hero is the finished painting.
|
|
35
|
+
3. **Run it from an inline script placed just before the hero**, not from a React effect, so it starts with the first paint and never waits for hydration. Build it as a self-contained function and inline `(${fn.toString()})(${JSON.stringify(config)})`. Change the page only through a constructed stylesheet (`new CSSStyleSheet()` + `document.adoptedStyleSheets`) and the canvas pixels, so hydration sees exactly the server's markup.
|
|
36
|
+
4. **Stand down** (return early) when: reduced motion is on; `adoptedStyleSheets` is unsupported; the URL has a hash other than `#top` (the visitor is going somewhere else) or a comparison switch; `sessionStorage` already has the key (repeat view; set it on the first run); the engraving hasn't decoded within 300 ms of the first paint.
|
|
37
|
+
5. **Paper and ink.** The constructed sheet shows the paper, hides the dark wash, and turns the white headline into ink (dark green, with a paper-coloured `text-shadow` halo of 2/6/14 px so hatching never runs through letters, as on an engraved map). CSS transitions on colour and text-shadow (160 ms) make the later flip smooth.
|
|
38
|
+
6. **Size the canvas** to the visible part of the hero only (`min(panelHeight, innerHeight − top)`) at `devicePixelRatio` capped at 2. Place the engraving with the image's own cover math (`scale = max(W/iw, H/ih)`, offset by `object-position`) so every line lands on the painting.
|
|
39
|
+
7. **The pen.** Unpack each channel into its own ink-on-transparent canvas. Split each pass into horizontal bands (12–16 px) and reveal each band left-to-right (or right-to-left) over 180–420 ms with an ease-out, the bands starting at staggered times: contours scattered from 0 ms, the long hatch top-to-bottom from 140 ms, the crosshatch from 520 ms. Draw only the newly revealed slice each frame with `drawImage` (source rect → dest rect). Lines *grow across the page* instead of fading in. Total ≈ 1.2 s.
|
|
40
|
+
8. **Hold** ~200 ms, and until the finished image has loaded (`img.complete && naturalWidth`): the brush must have something to reveal.
|
|
41
|
+
9. **The brush.** Switch the canvas to `globalCompositeOperation = "destination-out"` and drop the paper (the painting now sits under the canvas). Paint 5–10 broad strokes, one per row, alternating direction, each a slightly sloped cubic Bézier from just off one edge to just off the other, staggered over ~820 ms and 420 ms each. Each stroke is ~22 bristles: parallel offset lines with random width, alpha (some "dry" at 40%), and start/end trimmed toward the edges, so it erases like a real brush rather than a clean wipe. Use a seeded PRNG so every visitor sees the same strokes.
|
|
42
|
+
10. **Flip and finish.** ~420 ms into the brush (once it has passed the headline), clear the sheet: the wash fades in and the ink turns back to white, together. When all strokes are done, fade the canvas out over 320 ms, then `display:none`, zero its size, and remove the sheet.
|
|
43
|
+
11. **Fail safe.** Wrap every frame in try/catch; on any error, hide the canvas and drop the sheet: the visitor gets the finished painting.
|
|
44
|
+
|
|
45
|
+
## Pitfalls
|
|
46
|
+
|
|
47
|
+
- Running it from React: it starts after hydration, the visitor sees the finished painting first, then paper. It must be an inline script before the hero.
|
|
48
|
+
- Hiding the LCP image or delaying it: keep the real image loading underneath with `priority`; only cover it.
|
|
49
|
+
- Engraving and painting misaligned: always compute placement from the same cover math as `object-fit: cover`.
|
|
50
|
+
- White headline on paper: it vanishes. Swap to ink with a halo while the paper shows.
|
|
51
|
+
- Playing it on every view, or on in-page anchor jumps: once per session, never when the visitor is heading elsewhere.
|
|
52
|
+
- A brush that wipes in one clean rectangle: it reads as a loading effect. Bristles, slope, dry streaks.
|
|
53
|
+
- Fading lines in by opacity: it reads as a transition, not drawing.
|
|
54
|
+
|
|
55
|
+
## How to verify
|
|
56
|
+
|
|
57
|
+
- `palate animate --check` on a fresh session: frames show paper → lines growing → brush strokes → full painting by ~2.5 s; no layout shift; the headline is readable at every frame.
|
|
58
|
+
- Reload in the same session: the finished painting, no animation. Reduced motion and JS off: the finished painting.
|
|
59
|
+
- Throttle to Slow 3G: it stands down (no long paper wait).
|
|
60
|
+
- `palate shoot` at 1440 and 390: both crops of the engraving line up with the painting (check mid-animation frames at the horizon).
|
|
61
|
+
- LCP element is still the hero image.
|
|
62
|
+
|
|
63
|
+
## Examples
|
|
64
|
+
|
|
65
|
+
- palate's own site: the hero, Constable's "Wivenhoe Park, Essex" (CC0, National Gallery of Art), engraved in emerald on paper and brushed into colour on the first view of a session (`paint.ts`, `hero-paint.css`, `HeroArt.tsx`).
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: honest-progress-narration
|
|
3
|
+
name: Progress that narrates what's really happening
|
|
4
|
+
kind: sound-free-feedback
|
|
5
|
+
fits: [ai, developer, technical, saas, productivity, honest, trustworthy, calm]
|
|
6
|
+
avoid: [luxury, fashion, playful-kids]
|
|
7
|
+
signature: false
|
|
8
|
+
effort: m
|
|
9
|
+
perf: "progress comes from real events (SSE or polling ≥ 1 s); a single shimmer on the active line; nothing animates once done"
|
|
10
|
+
a11y: "a polite live region announces each step change (not every percent); a real progressbar only when the percentage is real; cancel is reachable by keyboard"
|
|
11
|
+
pairs_with: [self-playing-product-demo, first-win-onboarding, confetti-free-celebration]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
During a wait longer than about two seconds (an AI generation, an import, a build), the UI lists the real steps as they happen: "Reading 214 files… Found 3 routes… Writing the team page (2 of 3)…", each step ticking to a check when done, with an honest estimate and a way to cancel.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- People tolerate waits they understand. Named steps make time feel shorter and the system feel competent.
|
|
22
|
+
- Specific counts ("214 files") prove real work is happening, where a spinner proves nothing.
|
|
23
|
+
- Seeing earlier steps complete builds trust that the current one will too.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for any operation of 2–60 s with distinguishable stages: AI agents and generation, imports, deploys, exports, analysis.
|
|
28
|
+
|
|
29
|
+
Not for: sub-second actions (a spinner flash is worse than nothing; show the result) or truly opaque waits where you have no real stages; then use an honest indeterminate indicator with elapsed time, not invented steps.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Emit real events.** The backend reports step changes (`{ step: "read", detail: "214 files" }`) over SSE or a polled status endpoint. Never script fake steps on a timer to look busy.
|
|
34
|
+
2. **Render a short list**, max 5–6 visible: done steps with a check and their result in muted text, the active step with a subtle text shimmer (a moving gradient clipped to text, ~1.3 s loop), upcoming steps hidden or very faint. Collapse older steps into "4 steps done" when the list grows.
|
|
35
|
+
3. **Counts and estimates.** Use real numbers in the detail. Show a percentage bar only when you know the total; otherwise "about 20 s left" from historical medians, updated, and "taking longer than usual" past 2× the median.
|
|
36
|
+
4. **Floors and ceilings.** Hold each visible step at least ~300 ms so fast steps don't flash; never hold the final result back to look thorough.
|
|
37
|
+
5. **Cancel and recover.** A Cancel button for anything over ~5 s. On failure, keep the steps that finished, mark the failed one, say what happened and offer Retry from that step.
|
|
38
|
+
6. **A11y.** A polite `aria-live` region announces step changes ("Writing the team page"), not percentages. A real `role="progressbar"` with `aria-valuenow` only when it's real.
|
|
39
|
+
7. **Reduced motion:** no shimmer (plain text colour); spinners slow to ~2.4 s per turn or become static.
|
|
40
|
+
8. **No JS:** the server renders the current status with a meta refresh or a "Refresh status" link.
|
|
41
|
+
|
|
42
|
+
## Pitfalls
|
|
43
|
+
|
|
44
|
+
- Fake steps on a timer ("Reticulating splines…"): users notice when the same steps play for every job.
|
|
45
|
+
- Progress bars that sit at 99%.
|
|
46
|
+
- Logging every internal event: a wall of text that nobody reads.
|
|
47
|
+
- Losing finished work on failure.
|
|
48
|
+
- Shimmering everything at once.
|
|
49
|
+
|
|
50
|
+
## How to verify
|
|
51
|
+
|
|
52
|
+
- `palate states` (loading, error, slow): every state renders; the error keeps completed steps and offers retry.
|
|
53
|
+
- Network log: each step on screen corresponds to an event from the backend.
|
|
54
|
+
- Screen reader: announces each step once; cancel is reachable.
|
|
55
|
+
|
|
56
|
+
## Examples
|
|
57
|
+
|
|
58
|
+
- palate's own site: the live demo's agent rail shows a "Thinking…" shimmer, then palate's plan, then subagents and polish as named steps that tick to done (`Demo.tsx`); it's a scripted demo of the real flow, and the real product reports its real steps.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: honest-testimonial-wall
|
|
3
|
+
name: A testimonial wall without fake people
|
|
4
|
+
kind: layout
|
|
5
|
+
fits: [honest, trustworthy, community, saas, developer, b2b, consumer, waitlist]
|
|
6
|
+
avoid: [crisis, clinical]
|
|
7
|
+
signature: false
|
|
8
|
+
effort: m
|
|
9
|
+
perf: "avatars small (48–64px), lazy, WebP; embeds rendered as static HTML, not third-party widget scripts"
|
|
10
|
+
a11y: "each quote is a blockquote with cite (name, role, link); avatars have empty alt when the name is beside them; no auto-scrolling carousel"
|
|
11
|
+
pairs_with: [made-with-proof, editorial-grid-pull-quotes, waitlist-position-live, marquee-done-right]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
A wall of what real people actually said about the product: their words, their names, their faces or initials, and a link to where they said it (a post, a review, a GitHub issue). Every entry is verifiable; nothing is invented or polished into marketing copy. When there are no users yet, the section shows something honest instead.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- Visitors have learned that testimonial sections are often fake: stock faces, perfect sentences, first names only. Verifiable quotes beat that suspicion; the link is the proof.
|
|
22
|
+
- Real words carry details marketing copy can't ("it caught the empty state I forgot"), and details persuade.
|
|
23
|
+
- Honesty about being early ("Be one of the first") earns more trust than borrowed praise.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use once you have real, attributable praise from people who agreed to be quoted, or public posts you may link to.
|
|
28
|
+
|
|
29
|
+
Not for: invented quotes, AI-written "customer" lines, stock or generated faces, quotes from employees or friends presented as customers. Not in crisis or clinical contexts where personal stories need special care and consent processes.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Collect with consent.** Ask each person: may we quote these words, with your name, role, photo, and a link? Keep the record (date, channel, what they agreed to). Public posts: quote briefly, link to the source, and still prefer asking.
|
|
34
|
+
2. **Keep their words.** Trim for length with an ellipsis, never rewrite. Fix nothing but obvious typos. Keep the casual tone; it's what makes it believable.
|
|
35
|
+
3. **Entry anatomy.** Quote (16–17px), then name, role and company (14px), avatar (their own photo or initials on a neutral tint; never a stock or generated face), and the source as a small link with its platform label ("on X, 12 Oct", "GitHub issue #214"). Markup: `<figure><blockquote cite="url">…</blockquote><figcaption>…</figcaption></figure>`.
|
|
36
|
+
4. **Layout.** A masonry-like wall with CSS columns (`columns: 3 320px; column-gap: 16px`, `break-inside: avoid`) so quotes of different lengths pack naturally; one or two of the strongest set larger at the top. Phones: one column, the best 6 first with "Show more".
|
|
37
|
+
5. **Variety.** Mix sources (posts, reviews, issues, emails with permission) and roles; include one mildly critical-but-positive quote, it raises trust.
|
|
38
|
+
6. **Before you have any.** Don't fake it. Show instead: what you're testing and who it's for, a real count you can stand behind ("214 designers on the waitlist", see `waitlist-position-live`), the founder's own note with name and face, or the product's own proof (`made-with-proof`).
|
|
39
|
+
7. **No motion needed.** If you use a slow marquee of quotes (see `marquee-done-right`), it pauses on hover/focus and is static under reduced motion; never an auto-advancing carousel. Works without JS.
|
|
40
|
+
|
|
41
|
+
## Pitfalls
|
|
42
|
+
|
|
43
|
+
- First names only, no links: reads fake even when real.
|
|
44
|
+
- Avatars from stock or generators, or company logos you aren't allowed to show.
|
|
45
|
+
- Quotes with numbers you can't back ("10x faster") presented as fact.
|
|
46
|
+
- Embedding third-party widget scripts for each post: slow and tracks visitors. Render static.
|
|
47
|
+
- Leaving quotes up after someone asks to be removed.
|
|
48
|
+
|
|
49
|
+
## How to verify
|
|
50
|
+
|
|
51
|
+
- Every entry has a name, role and a working source link or a recorded consent; no avatar fails a reverse-image "is this stock" check.
|
|
52
|
+
- `palate shoot`: the wall packs without big gaps at 1440 and is one column at 390.
|
|
53
|
+
- Accessibility tree: blockquote + figcaption per entry; no live auto-rotation.
|
|
54
|
+
|
|
55
|
+
## Examples
|
|
56
|
+
|
|
57
|
+
- palate's own site has no customer wall yet; it shows the founder's own blind picks and the rules learned from them as proof instead, and says the page was designed with palate. That's the honest version for a product in private preview.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: inline-sparklines-in-copy
|
|
3
|
+
name: Sparklines inside the sentence
|
|
4
|
+
kind: data
|
|
5
|
+
fits: [data-rich, editorial, technical, scientific, finance, media, publishing, quiet, honest]
|
|
6
|
+
avoid: [playful-kids, luxury, fashion, low-bandwidth]
|
|
7
|
+
signature: false
|
|
8
|
+
effort: s
|
|
9
|
+
perf: "inline SVG, under 1 KB each, server-rendered; no chart library"
|
|
10
|
+
a11y: "the sentence states the number in words; the sparkline is aria-hidden or carries a one-line title; never colour-only"
|
|
11
|
+
pairs_with: [live-data-ticker, editorial-grid-pull-quotes, story-led-long-scroll]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
A word-sized line chart set inline in running text, right after the number it explains: "Build times fell to 41 s ▁▂▃▂▁▁ over six weeks." The chart is as tall as the x-height and shares the text colour.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- It joins the claim and the evidence in one glance; the reader never leaves the sentence to look at a chart elsewhere.
|
|
22
|
+
- Small multiples of shape (up, down, spiky, steady) are read pre-attentively; you see the trend before you read the number.
|
|
23
|
+
- It signals a data-literate brand without a dashboard screenshot.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use in editorial copy, changelogs, case studies, reports, finance and science products, and on any landing page that makes a quantitative claim.
|
|
28
|
+
|
|
29
|
+
Not for: brands whose voice is emotional rather than evidential, kids' products, or claims you can't back with a real series. One or two per section; not every number needs a line.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Real series only**: 8–40 points from your own data (weekly medians, daily counts). Store the series with the copy (JSON or a CMS field), not hard-coded paths.
|
|
34
|
+
2. **Render as inline SVG** on the server: `viewBox="0 0 W H"` with `W = points × 4`, `H = 10`; set `width="3.2em" height="1em"` (or 0.9em), `style="vertical-align: -0.12em"`, `preserveAspectRatio="none"`, one `<polyline fill="none" stroke="currentColor" stroke-width="1.25" vector-effect="non-scaling-stroke">`. Normalise min–max to the box with 1 unit of padding.
|
|
35
|
+
3. **Mark the end point**: a 2-unit circle at the last value, in the brand colour, so the eye lands on "now". Optionally a faint dot at the start.
|
|
36
|
+
4. **Keep the number in the text.** The sentence must be complete without the chart: "fell from 2 min to 41 s". The SVG is `aria-hidden="true"`, or has `role="img"` and `<title>Build time, last 6 weeks: falling</title>` if the text doesn't state the trend.
|
|
37
|
+
5. **Hover (optional, fine pointers only):** a tooltip with the exact range and dates. Never required to understand.
|
|
38
|
+
6. **No animation by default.** If you draw it in, use `stroke-dashoffset` over 600 ms once when it enters view, skipped under reduced motion; no-JS shows it drawn.
|
|
39
|
+
7. **Tailwind:** a `<Spark points={[...]} />` component that outputs the SVG; `text-current` so it follows link and dark-mode colours.
|
|
40
|
+
|
|
41
|
+
## Pitfalls
|
|
42
|
+
|
|
43
|
+
- Sparklines without a stated number: decorative squiggles that mislead.
|
|
44
|
+
- Different y-scales side by side without saying so: readers compare shapes that aren't comparable.
|
|
45
|
+
- Too tall: anything above 1.1em breaks the line height and pushes lines apart.
|
|
46
|
+
- Thin 0.5px strokes that vanish at 100% zoom on non-retina screens.
|
|
47
|
+
- Using it for 3 data points; that's not a trend.
|
|
48
|
+
|
|
49
|
+
## How to verify
|
|
50
|
+
|
|
51
|
+
- `palate shoot` at both widths: sparklines sit on the baseline, line height unchanged (compare paragraph height with and without).
|
|
52
|
+
- The text alone (screen reader, copy-paste) states every claim.
|
|
53
|
+
- Each series traces to a real data source in the repo.
|
|
54
|
+
|
|
55
|
+
## Examples
|
|
56
|
+
|
|
57
|
+
- The idea and the name come from Edward Tufte, who popularised word-sized charts as "sparklines" in his book Beautiful Evidence (2006). Use the idea; draw your own.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: inspect-our-taste
|
|
3
|
+
name: Inspect our taste (the design rationale overlay)
|
|
4
|
+
kind: easter-egg
|
|
5
|
+
fits: [crafted, developer, honest, technical, saas, ai, community, editorial]
|
|
6
|
+
avoid: [playful-kids, finance-trust-first, enterprise-compliance, serious-news, crisis]
|
|
7
|
+
signature: true
|
|
8
|
+
effort: m
|
|
9
|
+
perf: "the inspector is a dynamic import loaded on first open; one rAF loop writing transforms and sizes only while open"
|
|
10
|
+
a11y: "opens by key (P) or a visible chip; follows keyboard focus too; the card is role=status aria-live=polite; Esc and a Close button; never steals typing in fields"
|
|
11
|
+
pairs_with: [made-with-proof, console-easter-egg, colophon, self-playing-product-demo]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
A hidden overlay that lets a visitor hover (or Tab to, or tap) any part of the page and see why it looks the way it does: a box names the element (component, tag, text, width × height) and a dark card gives the decision behind it and the rule it follows, quoted from the team's design rules. Where no rule speaks to an element, it shows what was measured (type size/line-height/weight/colour, fill, radius, padding). Press P, or click a quiet "Inspect this page" chip.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- It turns the site into evidence. Claiming "we have taste" is cheap; showing the rule behind each decision is proof.
|
|
22
|
+
- Designers and developers love to inspect; meeting that habit with something better than DevTools is a delight that gets shared.
|
|
23
|
+
- For a design or developer tool, it demonstrates the product itself (here, palate's own pointing overlay).
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for design tools, developer tools, agencies, studios and any brand whose claim is craft or rigour, when you actually have written decisions to show. Keep it opt-in and discoverable (a chip near "made with", a console hint).
|
|
28
|
+
|
|
29
|
+
Not for: pages without a real design rationale (invented rules are worse than none), regulated or trust-first pages, or kids' products.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **The map.** A typed list of notes, most specific first: `{ sel, comp, title, rules: [{ id, text }], from, note? }`, where `sel` is a CSS selector (prefer `data-taste="…"` attributes you add to the page), `rules` quote real rules verbatim with their ids, and `from` says where the rule came from ("from a critique finding he agreed with, Oct 18"). Build one combined selector string from all of them.
|
|
34
|
+
2. **Lookup.** For an element under the pointer, `el.closest(COMBINED)`; then the first note whose `sel` it matches. No match: show measured values from `getComputedStyle` (font size/line-height, weight, colour as hex, background if not transparent, radius, padding).
|
|
35
|
+
3. **Trigger.** A tiny always-loaded root listens for `keydown` P (ignore with modifier keys, repeats, or when the target is an input, textarea, select or contenteditable) and a custom window event from the chip. On first open, `import("./Inspect")` and render it in a portal.
|
|
36
|
+
4. **While open.** Capture-phase listeners on window: `pointermove` (mouse only) picks the element; `click` freezes the card on an element (click again to unfreeze) and is swallowed with `preventDefault` + `stopPropagation` so links don't navigate; `focusin` picks the focused element so keyboard users can Tab through; `pointerdown` is stopped so the page's own widgets stay quiet; Esc closes. Ignore events inside the overlay itself.
|
|
37
|
+
5. **Follow.** One rAF loop: read `getBoundingClientRect()` of the picked element and write only `transform`, `width`, `height` to a fixed box (1.5 px brand border, 7% brand tint, the element's own border radius) and position the card above it (or below if no room, clamped 8 px from the edges). Update the W × H text only when it changes.
|
|
38
|
+
6. **The card.** Dark, compact, 12–14 px: a head line (component in bold, tag in mono brand-tint, truncated text, dimensions right-aligned with tabular numbers), then the title as one short sentence, the rules with their id pills, an optional note, and the source in faint type. `role="status" aria-live="polite"`.
|
|
39
|
+
7. **A pill** at the bottom centre says "Inspecting <brand>'s taste · Esc to close" with a Close button; it enters with a 200 ms rise (none under reduced motion).
|
|
40
|
+
8. **No JS:** the chip does nothing harmful (it's a button); nothing else exists. Reduced motion: no box easing.
|
|
41
|
+
|
|
42
|
+
## Pitfalls
|
|
43
|
+
|
|
44
|
+
- Rules written for the overlay rather than the real rules: visitors can tell. Quote real ones with dates.
|
|
45
|
+
- Letting clicks through: a visitor inspecting the signup button submits a form.
|
|
46
|
+
- Hijacking P while someone types in the waitlist field.
|
|
47
|
+
- Laying the box out with top/left per frame on a heavy page: transforms only.
|
|
48
|
+
- No keyboard path: focus must drive it too.
|
|
49
|
+
|
|
50
|
+
## How to verify
|
|
51
|
+
|
|
52
|
+
- Press P: the pill appears; hover the hero headline, the primary button, a credit: each shows its note; an unannotated paragraph shows measured values.
|
|
53
|
+
- Tab through the page with it open: the box follows focus. Click a link: it freezes instead of navigating. Esc closes.
|
|
54
|
+
- Type "p" in an input: nothing opens. `palate animate --check`: page unaffected while closed; bundle shows the inspector as a separate chunk.
|
|
55
|
+
|
|
56
|
+
## Examples
|
|
57
|
+
|
|
58
|
+
- palate's own site: press P (or "Inspect this page" by the made-with line) to see each piece's rule from the founder's taste profile (`Inspect.tsx`, `taste-map.ts`, `InspectTrigger.tsx`).
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: interactive-pricing-calculator
|
|
3
|
+
name: Pricing you can calculate
|
|
4
|
+
kind: data
|
|
5
|
+
fits: [saas, b2b, developer, ai, trustworthy, honest, technical, productivity]
|
|
6
|
+
avoid: [luxury, fashion, playful-kids, enterprise-compliance]
|
|
7
|
+
signature: false
|
|
8
|
+
effort: m
|
|
9
|
+
perf: "pure client-side arithmetic; no requests per input; server renders the default scenario"
|
|
10
|
+
a11y: "native range and number inputs with visible labels; the total is in an aria-live polite region, debounced 400 ms; works by keyboard"
|
|
11
|
+
pairs_with: [explorable-control, animated-comparison-table, honest-testimonial-wall]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
On the pricing page, one or two sliders for the quantities that drive cost (seats, requests per month, GB stored) and a total that updates as you move them, with the arithmetic shown underneath: "12 seats × $14 + 3M requests × $0.20 / 1k = $768 / month".
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- Usage pricing in a table makes people do maths and fear surprises; a calculator does it for them and removes the fear.
|
|
22
|
+
- Seeing the formula builds trust: nothing hidden, no "contact us" for a number that is computable.
|
|
23
|
+
- Moving a slider is the cheapest form of commitment; the visitor has already pictured their own usage.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use when price depends on 1–3 continuous inputs: API products, infrastructure, AI credits, per-seat SaaS with volume discounts.
|
|
28
|
+
|
|
29
|
+
Not for: flat plans (a calculator adds nothing), luxury or fashion (price isn't the story), or enterprise deals that genuinely require negotiation; and never if the real invoice can differ from what it shows.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **One source of truth.** Put the price model in a single typed module (`pricing.ts`: unit prices, tiers, included quota, discounts) used by the calculator, the pricing table and, ideally, billing. The calculator must never drift from billing.
|
|
34
|
+
2. **Inputs.** A native `<input type="range">` paired with a `<input type="number">` for exact values, both labelled. Use a log scale for quantities spanning orders of magnitude (1k → 100M requests): map slider 0–100 to `10^(min + t·(max−min))` and snap to friendly values (1, 2, 5 × 10ⁿ).
|
|
35
|
+
3. **Defaults** = the most common real customer (median, not the smallest). Server-render that scenario so no-JS visitors see a concrete total and its breakdown.
|
|
36
|
+
4. **The total.** Big, `tabular-nums`, changes instantly (no count-up animation: it looks like a slot machine). Under it, the formula in small text with each term. Show "included: first 100k requests free" as a struck-through term so the visitor sees the saving.
|
|
37
|
+
5. **Tier boundaries.** When a quantity crosses into a cheaper tier, say so in one line ("Volume price from 10M: $0.15 / 1k") and highlight the term for 600 ms (background tint, skipped under reduced motion).
|
|
38
|
+
6. **Recommend a plan.** Below the total, the plan that fits this usage with its button; switching inputs updates it.
|
|
39
|
+
7. **A11y.** The total lives in `aria-live="polite"` text, updated after 400 ms of no input so a screen reader isn't flooded. Keyboard: arrow keys move the slider in sensible steps (`step` matching the snapping).
|
|
40
|
+
8. **Share the scenario** (optional): write inputs to the URL query (`?seats=12&req=3e6`) with `history.replaceState`, so a buyer can send it to finance. Only numbers in the URL, never personal data.
|
|
41
|
+
|
|
42
|
+
## Pitfalls
|
|
43
|
+
|
|
44
|
+
- Totals that exclude tax, minimums or overage the real bill has.
|
|
45
|
+
- A slider with no exact input: people with a known number can't enter it.
|
|
46
|
+
- Linear sliders over huge ranges: all the useful values are crammed into the first 2%.
|
|
47
|
+
- Count-up animations on the price: feels manipulative.
|
|
48
|
+
- "Contact sales" replacing the number above a threshold without saying the threshold.
|
|
49
|
+
|
|
50
|
+
## How to verify
|
|
51
|
+
|
|
52
|
+
- Unit test: for a list of scenarios, calculator total equals the billing module's total.
|
|
53
|
+
- `palate shoot` with JS off: default scenario with a total and the formula.
|
|
54
|
+
- `palate states`: zero usage, maximum usage, and a tier boundary all render without overflow at 390 px.
|
|
55
|
+
- Keyboard only: reach and change every input; the total is announced once after you stop.
|
|
56
|
+
|
|
57
|
+
## Examples
|
|
58
|
+
|
|
59
|
+
- Usage-based infrastructure and API products commonly publish calculators beside their price tables; the honest version shows the formula, not just the total.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: isometric-illustration-system
|
|
3
|
+
name: Isometric illustration system
|
|
4
|
+
kind: imagery
|
|
5
|
+
fits: [technical, developer, b2b, saas, enterprise, crafted, hardware, friendly]
|
|
6
|
+
avoid: [luxury, fashion, editorial, heritage, playful-kids]
|
|
7
|
+
signature: false
|
|
8
|
+
effort: l
|
|
9
|
+
perf: "inline or static SVG, a shared symbol sheet; small (< 20 KB per scene); any motion via CSS transforms on groups"
|
|
10
|
+
a11y: "scenes are decorative (aria-hidden) unless they explain something, then a figure caption carries the explanation"
|
|
11
|
+
pairs_with: [code-drawn-diagram, technical-drawing-lines, one-colour-brand-world]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
A small kit of isometric shapes (blocks, servers, cards, pipes, people as simple columns) drawn on one 30° grid in a strict palette, assembled into scenes that explain how the product's parts fit: data flowing from A to B, layers of a stack, a workflow.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- Isometric drawing shows structure and depth without perspective distortion, so it's ideal for systems that are hard to photograph (infrastructure, APIs, pipelines).
|
|
22
|
+
- A consistent kit makes every new diagram look part of one world.
|
|
23
|
+
- It reads as engineered and precise, which suits technical buyers.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for infrastructure, developer platforms, B2B systems, hardware ecosystems: products whose value is an architecture.
|
|
28
|
+
|
|
29
|
+
Not for brands whose voice is editorial, luxurious or human-first, not for consumer emotion, and not as generic "isometric office people" decoration (a dated stock look). If you can't commit to a kit of at least ~12 consistent parts, use simple flat diagrams instead.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Grid.** True isometric: x-axis at 30° and 150°, vertical axis straight. Unit = 16px along each axis. Build in an SVG editor or in code with a helper `iso(x, y, z) => [ (x − y) * cos30 * u, (x + y) * sin30 * u − z * u ]`.
|
|
34
|
+
2. **Palette.** Three tones per material (top light, left mid, right dark) from 2–3 brand hues + neutrals. Fixed light direction for every object (top-left).
|
|
35
|
+
3. **Kit.** Draw primitives as `<symbol>`s: block, slab, cylinder, card stack, pipe straight/corner, arrow, person column, screen. Strokes either none or one consistent 1px darker edge.
|
|
36
|
+
4. **Scenes.** Compose scenes from `<use href="#block">` with transforms; label parts with HTML text positioned over the SVG (not SVG text with rotated skew; it hurts legibility).
|
|
37
|
+
5. **Motion (optional).** One idea per scene: packets moving along a pipe (`offset-path` or translate along an iso axis, 2–4s linear loop) or layers lifting apart on hover (translateY −8px, 240ms). Pause off screen; static under reduced motion.
|
|
38
|
+
6. **Responsive.** Scenes scale with `viewBox`; labels shrink to a numbered legend under ~480px.
|
|
39
|
+
7. No JS required for static scenes.
|
|
40
|
+
|
|
41
|
+
## Pitfalls
|
|
42
|
+
|
|
43
|
+
- Mixing isometric with perspective or dimetric drawings: the world breaks.
|
|
44
|
+
- Inconsistent light direction between objects.
|
|
45
|
+
- Labels skewed onto faces: hard to read.
|
|
46
|
+
- Decorative people with no role: stock clip-art feel.
|
|
47
|
+
|
|
48
|
+
## How to verify
|
|
49
|
+
|
|
50
|
+
- `palate shoot`: all scenes share palette and light direction; labels ≥12px and readable at 390.
|
|
51
|
+
- `palate animate --check`: motion paused off screen, none under reduced motion.
|
|
52
|
+
- SVG weights small; scenes crisp at 2x.
|
|
53
|
+
|
|
54
|
+
## Examples
|
|
55
|
+
|
|
56
|
+
- No public example cited; widely used by infrastructure and developer-platform companies for architecture explainers.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: kinetic-variable-type
|
|
3
|
+
name: Kinetic variable type
|
|
4
|
+
kind: type
|
|
5
|
+
fits: [bold, playful, energetic, artsy, music, fashion, events, experimental, launch]
|
|
6
|
+
avoid: [calm, finance-trust-first, clinical, accessibility-first, low-bandwidth, daily-tool]
|
|
7
|
+
signature: true
|
|
8
|
+
effort: m
|
|
9
|
+
perf: "one variable font file (subset, woff2, ~30–60 KB); animate font-variation-settings on a few words only; no per-letter layout thrash"
|
|
10
|
+
a11y: "the headline stays one real text node for readers; per-letter spans aria-hidden with an sr-only copy; stops under reduced motion"
|
|
11
|
+
pairs_with: [one-colour-brand-world, dark-band-contrast-section, generative-brand-pattern]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
A headline set in a variable font whose axes (weight, width, slant, or a custom axis) move: on load the word settles from wide to condensed, on hover letters swell near the pointer, or on scroll the weight tracks progress. The type itself is the animation; there is no illustration.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- Type is the most brand-specific thing on the page; making it move puts the identity in motion instead of borrowing generic effects.
|
|
22
|
+
- Variable axes interpolate smoothly, so the motion reads as material (stretching, breathing) rather than as a slideshow.
|
|
23
|
+
- It costs one font file instead of video or 3D.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for loud, expressive brands: music, events, fashion, studios, launches, festivals, type foundries. Works best on one short line (1–4 words) at display size.
|
|
28
|
+
|
|
29
|
+
Not for calm or trust-first products, for body text, or for daily tools. Avoid where the audience includes many people with vestibular sensitivity (health, public services). If the brand font has no variable version, don't fake it with scale transforms.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Font.** Choose a variable font with an axis worth moving (wght 100–900, wdth 75–125, or a custom axis). Self-host one woff2, subset to the characters in the headline plus basic Latin, `font-display: swap`, preload it.
|
|
34
|
+
2. **Static first.** Set the headline at its final, resting axes in CSS (`font-variation-settings: "wght" 800, "wdth" 85`). This is what no-JS and reduced motion get.
|
|
35
|
+
3. **Load settle (CSS only).** A keyframe from wide/light to the resting values, 900–1200ms, `cubic-bezier(0.22, 1, 0.36, 1)`, inside `@media (prefers-reduced-motion: no-preference)`. Stagger words by 60–80ms, not letters (letter staggers read as a template effect).
|
|
36
|
+
4. **Pointer swell (optional, desktop).** Split the line into letter spans in JS after hydration; keep the original text node in an `sr-only` span and mark the letters `aria-hidden`. On `pointermove` (throttled with rAF), set a CSS variable per letter from its distance to the pointer: `--w: clamp(300, 900 − d * 2.2, 900)` and use `font-variation-settings: "wght" var(--w)`. Only for `(hover: hover) and (pointer: fine)`. Reset smoothly on leave with a 300ms transition.
|
|
37
|
+
5. **Reserve width.** Width-changing axes reflow the line. Either animate only weight on a letter-spaced line, or wrap the headline in a box with fixed width and `white-space: nowrap`, and test that the widest state fits at 320px.
|
|
38
|
+
6. **Scroll-linked (optional).** With CSS scroll-driven animations (`animation-timeline: view()`), map weight to the section's progress; fall back to the static state where unsupported (`@supports`).
|
|
39
|
+
|
|
40
|
+
## Pitfalls
|
|
41
|
+
|
|
42
|
+
- Animating every letter, everywhere: noisy and slow. One line, one moment.
|
|
43
|
+
- Width axis reflowing surrounding layout: causes CLS. Contain it.
|
|
44
|
+
- Per-letter spans read letter by letter by screen readers: always keep an sr-only copy.
|
|
45
|
+
- Loading two static weights and tweening between them: not variable, it jumps.
|
|
46
|
+
- Leaving the effect running forever: it should settle.
|
|
47
|
+
|
|
48
|
+
## How to verify
|
|
49
|
+
|
|
50
|
+
- `palate shoot` with JS off and reduced motion: the headline shows at its resting axes, fully legible.
|
|
51
|
+
- `palate animate --check`: frame strip shows the settle finishing in ≤1.2s; no layout shift in neighbouring elements.
|
|
52
|
+
- At 320px wide the widest axis state doesn't overflow.
|
|
53
|
+
- Accessibility tree: the headline is one readable string.
|
|
54
|
+
|
|
55
|
+
## Examples
|
|
56
|
+
|
|
57
|
+
- No public example cited; the pattern is common on type foundry specimen pages and music festival sites, where a variable display face is the whole identity.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: konami-secret
|
|
3
|
+
name: A secret key sequence
|
|
4
|
+
kind: easter-egg
|
|
5
|
+
fits: [playful, developer, gaming, community, retro, technical, energetic, crafted]
|
|
6
|
+
avoid: [enterprise-compliance, clinical, finance-trust-first, crisis, government, serious-news]
|
|
7
|
+
signature: false
|
|
8
|
+
effort: s
|
|
9
|
+
perf: "one keydown listener with a tiny buffer; the payload is lazy-loaded with dynamic import on first trigger"
|
|
10
|
+
a11y: "ignored while typing in fields and with modifiers; the effect is dismissible with Esc; reduced motion gets a still version; never needed for any task"
|
|
11
|
+
pairs_with: [console-easter-egg, tiny-game-easter-egg, inspect-our-taste]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
A hidden keyboard sequence (the classic up-up-down-down-left-right-left-right-B-A, or a short word tied to the brand) that unlocks something delightful: an alternate theme, a hidden mode, a message from the team, a tiny game.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- Secrets reward the curious and give fans something to share ("try typing… on their site"), which spreads by word of mouth.
|
|
22
|
+
- It signals that real people with a sense of humour made this, especially to developers and gamers who know the reference.
|
|
23
|
+
- Because it is opt-in and invisible, it costs nothing to everyone else.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for developer tools, games, creative studios, community products and brands with a playful voice. A brand word (the product name typed anywhere) is often better than the classic code: more on-brand and less expected.
|
|
28
|
+
|
|
29
|
+
Not for: regulated, clinical, financial or government contexts, crisis pages, or anywhere a surprise could alarm someone. It must never be the only route to a feature.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Pick the sequence and the payload.** Payload ideas, in order of value: something that shows the craft (a design-mode overlay, the grid revealed), an alternate theme that persists for the session, a short note from the makers, a tiny game. Keep it on-brand.
|
|
34
|
+
2. **Listener.** One `keydown` on `window`. Ignore when `e.target` is an input, textarea, select or contenteditable, when `e.repeat`, or with Ctrl/Meta/Alt. Normalise `e.key` (lowercase letters; `ArrowUp` etc. as-is). Keep a ring buffer of the last N keys; compare with the sequence; reset after 1.5 s idle.
|
|
35
|
+
3. **Lazy payload.** On match, `import("./Secret")` so the code costs nothing until used. In React, keep the trigger in a small client component mounted once in the layout.
|
|
36
|
+
4. **Feedback.** Make the unlock unmistakable but brief (a 400 ms transition into the new mode), and show a tiny pill: "Secret mode. Esc to leave." Esc and a Close button restore everything.
|
|
37
|
+
5. **Persistence.** Session only (`sessionStorage` in try/catch), never permanent; a reload or Esc returns to normal.
|
|
38
|
+
6. **Hint, lightly.** A console message, a line in the colophon or a "?" in the footer; never a visible "find the secret" banner.
|
|
39
|
+
7. **Touch.** Offer an equivalent (e.g. tapping the logo 7 times) if the payload is worth it; otherwise accept it's desktop-only.
|
|
40
|
+
8. **Reduced motion:** the payload appears without animation; any game pauses its motion or offers a static version.
|
|
41
|
+
|
|
42
|
+
## Pitfalls
|
|
43
|
+
|
|
44
|
+
- Triggering while someone types in a form (a search for "bab…").
|
|
45
|
+
- Payloads that break layout, cover content without a way out, or persist forever.
|
|
46
|
+
- Loud audio on trigger.
|
|
47
|
+
- Shipping a heavy payload in the main bundle.
|
|
48
|
+
- Overusing pop-culture references that don't fit the brand.
|
|
49
|
+
|
|
50
|
+
## How to verify
|
|
51
|
+
|
|
52
|
+
- Typing the sequence inside a text field does nothing; outside, it triggers once.
|
|
53
|
+
- Esc restores the page exactly; reload restores defaults.
|
|
54
|
+
- Bundle analysis: the payload is a separate chunk.
|
|
55
|
+
- `palate animate --check` with reduced motion: no motion from the payload.
|
|
56
|
+
|
|
57
|
+
## Examples
|
|
58
|
+
|
|
59
|
+
- The classic sequence comes from 1980s video games and has been hidden in many websites since; use the idea with a payload that is yours.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: layered-paper-depth
|
|
3
|
+
name: Layered paper depth
|
|
4
|
+
kind: texture
|
|
5
|
+
fits: [crafted, playful, warm, friendly, education, nonprofit, consumer, artsy]
|
|
6
|
+
avoid: [technical, data-dense-tool, enterprise-compliance, minimal, serious-news]
|
|
7
|
+
signature: true
|
|
8
|
+
effort: m
|
|
9
|
+
perf: "3–5 SVG or CSS layers with static shadows; optional parallax moves transforms only, capped at 3 layers"
|
|
10
|
+
a11y: "decorative layers aria-hidden; content sits on the top sheet with full contrast; parallax off under reduced motion"
|
|
11
|
+
pairs_with: [riso-print-texture, hand-drawn-annotations, story-led-long-scroll, canvas-grain]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
A scene or section built from stacked cut-paper sheets: flat shapes in a few related colours, each sheet casting a short soft shadow on the one beneath, with a faint fibre texture. Hills, waves, a skyline or the product's own icon shapes, cut out and layered, frame the content.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- Physical depth from shadows alone feels handmade and touchable, which reads warm and human without stock illustration.
|
|
22
|
+
- Each layer is a flat colour, so the palette stays disciplined; depth comes from order, not from gradients.
|
|
23
|
+
- A little parallax between sheets adds life that the eye reads as depth, not as "animation".
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for friendly consumer products, education, nonprofits, children's books for adults, travel and seasonal campaigns, onboarding illustrations.
|
|
28
|
+
|
|
29
|
+
Not for: technical, precision-led brands, data tools, compliance-heavy pages, serious news. Avoid if the rest of the page uses glass or 3D renders.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Draw the sheets.** 3–5 layers as SVG paths (or `clip-path: path()` on divs), back to front, each one flat colour stepping in lightness: e.g. from `oklch(0.92 0.04 150)` at the back to `oklch(0.55 0.09 150)` in front. Same hue family plus one accent sheet.
|
|
34
|
+
2. **Shadows that describe a cut edge.** Each sheet: `filter: drop-shadow(0 2px 2px rgb(0 0 0 / .12)) drop-shadow(0 8px 12px rgb(0 0 0 / .08))`. Same light direction for all. Keep shadow offsets small; paper is thin.
|
|
35
|
+
3. **Fibre.** Overlay one SVG `feTurbulence` tile (`baseFrequency` ~1.2, 1 octave) at 6–10% opacity with `mix-blend-mode: multiply` on the whole scene, once (not per layer).
|
|
36
|
+
4. **Content on top.** The headline and actions sit on the frontmost sheet or above the scene on plain paper; never across layer edges.
|
|
37
|
+
5. **Optional parallax.** On scroll, translate the back two layers by 2–6% of scroll distance in a `requestAnimationFrame` driven by one passive scroll listener (or CSS `animation-timeline: view()` where supported, with a static fallback). Max 3 moving layers; `will-change: transform` only on those.
|
|
38
|
+
6. **React/Tailwind.** One `<PaperScene>` component with layers as an array of `{ d, fill, depth }`; Tailwind `drop-shadow-*` with arbitrary values.
|
|
39
|
+
7. **Fallbacks.** Static by default; parallax only under `prefers-reduced-motion: no-preference` and only with JS. On phones, reduce to 3 layers and drop parallax.
|
|
40
|
+
|
|
41
|
+
## Pitfalls
|
|
42
|
+
|
|
43
|
+
- Long, dark shadows: it turns into a 2010 web-2.0 card stack. Short and soft.
|
|
44
|
+
- Inconsistent light direction between layers.
|
|
45
|
+
- Too many colours: 4 tones of one hue plus an accent is enough.
|
|
46
|
+
- Shapes with no meaning; cut the product's own shapes, a place, or a story element.
|
|
47
|
+
|
|
48
|
+
## How to verify
|
|
49
|
+
|
|
50
|
+
- `palate shoot`: the shadows all fall the same way; text never crosses a layer edge; contrast passes.
|
|
51
|
+
- `palate animate --check`: only transforms change on scroll; reduced motion shows the static scene.
|
|
52
|
+
- Phone width: the scene still reads with fewer layers and doesn't push the headline below the fold.
|
|
53
|
+
|
|
54
|
+
## Examples
|
|
55
|
+
|
|
56
|
+
- A common technique in illustrated editorial and children's-book-style marketing; no specific site cited.
|