@palate/cli 0.0.0-stage → 0.0.1
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 +151 -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 +36 -4
- package/scripts/pack-assets.mjs +48 -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,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: sliding-nav-indicator
|
|
3
|
+
name: Sliding nav indicator
|
|
4
|
+
kind: navigation
|
|
5
|
+
fits: [crafted, minimal, saas, productivity, developer, calm, tactile, docs]
|
|
6
|
+
avoid: [heritage, retro, playful-kids]
|
|
7
|
+
signature: false
|
|
8
|
+
effort: s
|
|
9
|
+
perf: "one absolutely positioned element moved with transform; measured on change and on resize only"
|
|
10
|
+
a11y: "real links/tabs with aria-current or aria-selected; the indicator is aria-hidden; works with keyboard focus; instant under reduced motion"
|
|
11
|
+
pairs_with: [calm-motion-system, shape-continuity-morph, command-palette-site-nav]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
One highlight shape (a pill, an underline) that slides and resizes from the current nav item or tab to the one you hover or select, instead of each item lighting up on its own. On hover it follows the pointer between items; on selection it settles under the chosen one.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- Motion shows the relationship: the indicator travelling from A to B says "you moved from here to there" in one glance.
|
|
22
|
+
- It makes a row of plain text links feel like a single built instrument, which reads as craft.
|
|
23
|
+
- It's cheap and contained: one element, one easing, no layout changes.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use on top navs with 3–7 items, segmented controls, tab bars, pricing period toggles (monthly/yearly), and docs sidebars' section switchers.
|
|
28
|
+
|
|
29
|
+
Not for: long or wrapping navs (the indicator jumps across lines), heritage or print-like brands where a static underline is more fitting, and mobile bottom bars where a simple state change is clearer.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Markup.** A `<nav>` with a relatively positioned list of real `<a>` elements (or a `role="tablist"` with buttons for tabs). The current item gets `aria-current="page"` (or `aria-selected="true"`). Add one `<span aria-hidden class="indicator">` inside the list.
|
|
34
|
+
2. **Server default.** Render the active item with its own static background or underline via `[aria-current]` styles, so without JS the current item is still marked. When JS mounts, set `data-js` on the list and switch those static styles off in favour of the indicator.
|
|
35
|
+
3. **Measure.** On mount, on active change and on `ResizeObserver` of the list: read the target item's `offsetLeft`, `offsetWidth` (and top/height for pills). Write `transform: translateX(x)` and `width: w` (width is OK here: one element, one write per change; or use `scaleX` on a fixed-width bar and accept slightly scaled corners for underlines).
|
|
36
|
+
4. **Motion.** `transition: transform 240ms cubic-bezier(.23,1,.32,1), width 240ms cubic-bezier(.23,1,.32,1)`. Hover-follow: on `pointerenter` of an item, move to it; on `pointerleave` of the whole nav, return to the active item after 80 ms (prevents flicker when crossing gaps). Also follow `:focus-visible` so keyboard users see it.
|
|
37
|
+
5. **First paint.** Don't animate from x=0 on mount: set position with `transition: none`, then enable transitions on the next frame.
|
|
38
|
+
6. **Reduced motion.** Under `prefers-reduced-motion: reduce`, transition-duration 0; the indicator jumps.
|
|
39
|
+
7. **Look.** Pill: item padding 6–8px × 12px, radius 8px, a neutral tint (≈ 6% of the text colour) on hover, brand tint on active. Underline: 2px, brand colour, inset 12px from item edges.
|
|
40
|
+
|
|
41
|
+
React/Tailwind notes: a `useIndicator(listRef, activeIndex)` hook; with Motion already in the project, a `layoutId="nav-pill"` on the indicator inside the active item does the same.
|
|
42
|
+
|
|
43
|
+
## Pitfalls
|
|
44
|
+
|
|
45
|
+
- Animating from the left edge on every page load: looks like a bug.
|
|
46
|
+
- Using the indicator as the only signal of the current page: screen readers need `aria-current`.
|
|
47
|
+
- Re-measuring every frame or on every scroll: unnecessary layout reads.
|
|
48
|
+
- Webfonts loading after measurement: widths change. Re-measure on `document.fonts.ready`.
|
|
49
|
+
|
|
50
|
+
## How to verify
|
|
51
|
+
|
|
52
|
+
- `palate animate --check`: hover strip shows the indicator moving between items, no layout shift in the nav; reduced-motion strip shows instant moves.
|
|
53
|
+
- JS off: the current page is still visibly marked.
|
|
54
|
+
- Tab through the nav: the indicator follows focus.
|
|
55
|
+
|
|
56
|
+
## Examples
|
|
57
|
+
|
|
58
|
+
- The pattern: a top nav where a soft grey pill glides under whichever link you hover and settles back under the current page when the pointer leaves.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: sticky-scroll-story
|
|
3
|
+
name: Sticky scroll storytelling
|
|
4
|
+
kind: layout
|
|
5
|
+
fits: [saas, developer, ai, productivity, b2b, technical, launch, editorial]
|
|
6
|
+
avoid: [low-bandwidth, daily-tool, accessibility-first]
|
|
7
|
+
signature: true
|
|
8
|
+
effort: m
|
|
9
|
+
perf: "position: sticky does the pinning; one IntersectionObserver picks the active step; the visual swaps state, not images per step"
|
|
10
|
+
a11y: "every step is real text in order; the visual has a text equivalent; no scroll-jacking; works as a stacked list without JS"
|
|
11
|
+
pairs_with: [self-playing-product-demo, story-led-long-scroll, scroll-scrubbed-product-film, dark-band-contrast-section]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
Two columns: on one side a pinned visual (the product, a diagram) stays in place while, on the other, short steps scroll past. As each step reaches the middle of the screen, the visual changes to show exactly that step: the field fills in, the chart updates, the panel opens.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- It pairs every claim with its proof at the moment it's read, so the reader never has to connect a sentence to a screenshot three sections away.
|
|
22
|
+
- The visual stays put, so changes are easy to see; the change *is* the explanation.
|
|
23
|
+
- The reader controls the pace by scrolling, which feels more respectful than an auto-playing video.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use to explain a workflow of 3–6 steps that happen in one place (an editor, a dashboard, a pipeline), or a product with a clear before → after.
|
|
28
|
+
|
|
29
|
+
Not for: steps that each need a different screen (use separate sections), phones-first audiences without a good stacked fallback, or more than ~6 steps (it becomes a long pinned scroll).
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Layout.** `grid md:grid-cols-[5fr_7fr]` (steps / visual). The visual column: `position: sticky; top: calc(50vh - H/2)` or `top: 96px` with a fixed height (`h-[min(70vh,640px)]`). Steps: each `min-h-[70vh]` with the text vertically centred, so one step is active at a time.
|
|
34
|
+
2. **Active step.** One IntersectionObserver with `rootMargin: "-45% 0px -45% 0px"` (a thin band at screen centre) observes the steps; the intersecting one sets `active` (state or a `data-step` attribute on the section).
|
|
35
|
+
3. **The visual is one component with states.** Render the product UI once and drive it from `active`: show/hide parts, move a highlight, change values. Transition with transforms and opacity, 250–400ms, `cubic-bezier(.23,1,.32,1)`. Avoid swapping five large screenshots.
|
|
36
|
+
4. **Show the active step in the text column** too: full opacity for active, 45% for others (and a small progress indicator), so the reader knows what the visual is showing.
|
|
37
|
+
5. **Phones.** No sticky: each step becomes text followed by its own static rendering of the visual in that state (render the component with `step={i}`), stacked.
|
|
38
|
+
6. **Fallbacks.** No JS: the desktop shows all steps at full opacity and the visual in its final state; better, render the stacked phone layout until JS marks the section `data-js`. Reduced motion: states switch instantly (no transition), still in sync.
|
|
39
|
+
7. **Semantics.** Steps as an ordered list with headings; the visual `aria-hidden` if every step's text fully describes the change, otherwise give it a live region that announces the step.
|
|
40
|
+
|
|
41
|
+
## Pitfalls
|
|
42
|
+
|
|
43
|
+
- Scroll-jacking or wheel hijacking: let native scroll do it.
|
|
44
|
+
- A sticky visual taller than the viewport: it scrolls away on laptops. Cap height with `min(70vh, …)`.
|
|
45
|
+
- Steps too short: several are "active" in one flick; give each ~70vh.
|
|
46
|
+
- Visual states that differ only subtly: point at the change with a highlight.
|
|
47
|
+
|
|
48
|
+
## How to verify
|
|
49
|
+
|
|
50
|
+
- `palate shoot` at 1440 at several scroll positions: each step pairs with its visual state; at 390 the stacked fallback shows every state.
|
|
51
|
+
- JS off: content complete, nothing invisible.
|
|
52
|
+
- `palate animate --check`: the visual changes only by transform/opacity; reduced motion still syncs.
|
|
53
|
+
|
|
54
|
+
## Examples
|
|
55
|
+
|
|
56
|
+
- A widely used pattern on developer-tool and SaaS landing pages; no specific site cited.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: story-led-long-scroll
|
|
3
|
+
name: Story-led long scroll
|
|
4
|
+
kind: layout
|
|
5
|
+
fits: [editorial, cinematic, nonprofit, sustainability, cultural, launch, media, heritage, crafted]
|
|
6
|
+
avoid: [daily-tool, data-dense-tool, enterprise-compliance, low-bandwidth]
|
|
7
|
+
signature: true
|
|
8
|
+
effort: l
|
|
9
|
+
perf: "images lazy below the fold, sized, AVIF/WebP; scroll effects via IntersectionObserver or CSS scroll timelines, never scroll handlers that touch layout"
|
|
10
|
+
a11y: "the story is readable top to bottom as plain HTML; headings outline the chapters; no scroll-jacking; motion optional"
|
|
11
|
+
pairs_with: [sticky-scroll-story, scroll-progress-chapters, editorial-grid-pull-quotes, museum-painting-backdrop]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
The page is one narrative told in chapters as you scroll: a problem, a turn, the product as the answer, the proof, the invitation. Each chapter has its own composition (a full-bleed picture, a big line, a quiet paragraph, a product moment), and the transitions between them are designed like page turns.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- A story gives the reader a reason to keep scrolling; a feature list gives them a reason to skim.
|
|
22
|
+
- Varying the composition per chapter avoids the template rhythm (header, grid, header, grid) and lets each idea have the form it needs.
|
|
23
|
+
- People remember stories; they don't remember feature lists.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for launches, mission and about pages, nonprofits and campaigns, products with a strong "why", annual reports, case studies.
|
|
28
|
+
|
|
29
|
+
Not for: tools that people come back to daily (they want the login and the docs), pages where visitors arrive with a specific question (pricing, support), or audiences on slow connections if the story leans on large images.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Write the story first.** 5–7 chapters, one sentence each, before any layout. If the sentences don't make a story read aloud, the page won't either.
|
|
34
|
+
2. **One composition per chapter.** Pick from: full-bleed image with a short line on it; a single huge sentence on plain ground; a narrow column of prose; the product working; a number with its sentence; a quote. No two neighbours alike.
|
|
35
|
+
3. **Chapter openers.** A small chapter label (`01 · The problem`) only if the chapters are navigable (see `scroll-progress-chapters`); otherwise let the composition change mark the turn.
|
|
36
|
+
4. **Transitions.** Overlap neighbours (an image rising into the previous chapter by 64–120px), colour changes of the ground between chapters, or a sticky element that hands off (see `sticky-scroll-story`). Never full-screen snap scrolling.
|
|
37
|
+
5. **Reveal, lightly.** Elements fade/rise 12–16px over 400–600ms as they enter (`IntersectionObserver`, threshold 0.2, once), under `prefers-reduced-motion: no-preference` only, and visible by default in CSS (add the hidden starting class only from JS) so no-JS shows everything.
|
|
38
|
+
6. **Exits along the way.** A visible action at the end and a quiet one midway (sticky header button), so a convinced reader doesn't have to finish.
|
|
39
|
+
7. **Performance.** First chapter's image is the LCP: `priority`/`fetchpriority="high"`, sized; all others lazy with explicit dimensions.
|
|
40
|
+
|
|
41
|
+
## Pitfalls
|
|
42
|
+
|
|
43
|
+
- Scroll-jacking (hijacking wheel speed or snapping): people leave.
|
|
44
|
+
- Every element animating in: the story drowns in effects; animate chapter openers only.
|
|
45
|
+
- A story with no product in it until the end.
|
|
46
|
+
- 15 chapters. Cut to the ones that move the argument.
|
|
47
|
+
|
|
48
|
+
## How to verify
|
|
49
|
+
|
|
50
|
+
- `palate shoot` with JS off: the full story renders, nothing hidden.
|
|
51
|
+
- `palate animate --check`: no hidden content under reduced motion; no layout shift as images load.
|
|
52
|
+
- Read only the headings in order: they tell the story.
|
|
53
|
+
|
|
54
|
+
## Examples
|
|
55
|
+
|
|
56
|
+
- palate's own home is a short version of this: the painted hero, the product working, the features each on their own painting, the taste replay, then the invitation.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: tactile-button
|
|
3
|
+
name: The tactile primary button
|
|
4
|
+
kind: sound-free-feedback
|
|
5
|
+
fits: [crafted, tactile, premium, saas, friendly, calm, consumer, productivity, warm]
|
|
6
|
+
avoid: [minimal, clinical, retro]
|
|
7
|
+
signature: false
|
|
8
|
+
effort: s
|
|
9
|
+
perf: "CSS only: background-image, box-shadow and a scale on :active; transitions on background and scale only"
|
|
10
|
+
a11y: "keep text contrast ≥ 4.5:1 on the darkest part of the fill; a visible focus ring separate from the depth shadows"
|
|
11
|
+
pairs_with: [calm-motion-system, copy-confirmation, gentle-error-nudge]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
The primary button made to feel like a physical key: a same-hue fill that is a touch lighter at the top, a bright hairline along the top edge, a darker ring, a soft shadow beneath, and a press state where the light leaves and the button sits down (inset shadow, slight scale). Only the primary action gets it.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- Light from above and a shadow below are how the eye reads "raised"; a raised thing invites pressing.
|
|
22
|
+
- The press state confirms the click without sound or animation: the button visibly goes down.
|
|
23
|
+
- Restricting depth to the one primary action makes it the obvious next step on a flat page.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for the main call to action (signup, buy, run) in crafted, friendly or premium products. One per view.
|
|
28
|
+
|
|
29
|
+
Not for: secondary buttons, toolbars or dense UI (depth everywhere is noise), strictly flat minimal brands, or skeuomorphic excess (no glossy gels).
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. Pick the brand colour `B` (e.g. `#0b6e4f`), a lighter step `B+` (~8% lighter, same hue: `#17895f`), and a darker ring `B−` (`#075a40`).
|
|
34
|
+
2. Rest:
|
|
35
|
+
```css
|
|
36
|
+
.btn-brand { color: #fff; background-color: B; background-image: linear-gradient(180deg, B+ 0%, B 100%);
|
|
37
|
+
box-shadow: 0 0 0 1px B−, inset 0 1px 0 rgba(255,255,255,.24), 0 1px 2px rgba(deep,.22), 0 3px 8px -3px rgba(deep,.32);
|
|
38
|
+
text-shadow: 0 1px 0 rgba(deep,.28); }
|
|
39
|
+
```
|
|
40
|
+
(`deep` = the brand's darkest tone; a tinted shadow, never pure black.)
|
|
41
|
+
3. Hover: both gradient stops a step lighter. No lift, no glow.
|
|
42
|
+
4. Active: gradient flattens to `B → slightly darker B`; shadows become `0 0 0 1px B−, inset 0 1px 2px rgba(deep,.35)` (the top light is gone, it sits in); add `scale(0.96–0.97)` with `transition: scale 200ms ease-out, background-color 200ms ease-out`.
|
|
43
|
+
5. Focus: the site's focus ring (`outline: 2px solid; outline-offset: 2px`) outside the depth, keyboard only (`:focus-visible`).
|
|
44
|
+
6. Tailwind: define it as a component class in `@layer components` so utilities can still set size and radius (`h-11 rounded-[8px] px-5 btn-brand active:scale-[0.97]`).
|
|
45
|
+
7. Reduced motion: the scale is tiny and user-initiated, fine to keep; drop it if your system removes all transforms.
|
|
46
|
+
|
|
47
|
+
## Pitfalls
|
|
48
|
+
|
|
49
|
+
- A strong gradient (two different hues, or > 10% lightness change): it looks like 2008 gel.
|
|
50
|
+
- Black shadows on a coloured button: muddy. Tint shadows with the brand's deep tone.
|
|
51
|
+
- Applying it to every button: depth loses meaning.
|
|
52
|
+
- Losing the focus ring under the box-shadow stack: use `outline`, not another shadow.
|
|
53
|
+
- White text that fails contrast on the lighter top: check against the lightest stop.
|
|
54
|
+
|
|
55
|
+
## How to verify
|
|
56
|
+
|
|
57
|
+
- `palate details`: the primary button has the ring, top hairline and shadow; secondary buttons are flat.
|
|
58
|
+
- Press and hold: it visibly sinks; release returns in ~200 ms.
|
|
59
|
+
- Contrast check on the lightest gradient stop ≥ 4.5:1. Keyboard Tab shows the ring.
|
|
60
|
+
|
|
61
|
+
## Examples
|
|
62
|
+
|
|
63
|
+
- palate's own site: `.btn-brand` in `globals.css`, on "Join the waitlist" and the 404's "Back to palate".
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: technical-drawing-lines
|
|
3
|
+
name: Technical drawing lines
|
|
4
|
+
kind: texture
|
|
5
|
+
fits: [technical, developer, hardware, scientific, minimal, crafted, ai, saas]
|
|
6
|
+
avoid: [playful-kids, warm, food, fashion, luxury]
|
|
7
|
+
signature: false
|
|
8
|
+
effort: s
|
|
9
|
+
perf: "hairlines are borders and one repeating background; no images, no JS"
|
|
10
|
+
a11y: "decorative lines are CSS only; dimension labels that carry meaning are real text with contrast; nothing depends on them"
|
|
11
|
+
pairs_with: [code-drawn-diagram, isometric-illustration-system, screenshot-detail-crops, one-colour-brand-world]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
The page is drawn like an engineering sheet: hairline rules that run edge to edge and meet at visible crosshair corners, a faint measured grid, dimension lines with small labels (`48`, `1440`, `0.5 mm`), and callout leaders pointing at parts of the product. Content sits in cells of the drawing instead of floating cards.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- Precision is the message: for dev tools, hardware and infrastructure, a page that looks *measured* borrows the credibility of a blueprint.
|
|
22
|
+
- Lines that continue across sections make the page feel like one constructed object, not a stack of blocks.
|
|
23
|
+
- It replaces cards and shadows with structure, which keeps the page calm and lets real product UI be the only rich thing on it.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for developer tools, hardware, APIs, design tools, AI infrastructure, anything whose users respect precision. Works in light (ink on white) and dark (pale lines on near-black).
|
|
28
|
+
|
|
29
|
+
Not for: food, fashion, warm consumer brands or kids (it reads cold), luxury (too busy). Don't use it as decoration on a page whose content is loose and imprecise; the frame makes the mismatch obvious.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **One line colour.** `--rule: color-mix(in oklab, currentColor 12%, transparent)` in light, ~16% in dark. All lines use it, 1px, never thicker.
|
|
34
|
+
2. **Frame the page.** A centred container (`max-w-[1224px]`) with `border-x` in `--rule`; each section has `border-t`. Lines run to the viewport edge with an extra full-width `border-t` on the section wrapper, so horizontals cross the vertical frame.
|
|
35
|
+
3. **Crosshairs at the crossings.** At each corner where frame and section lines meet, a 9px plus sign: an absolutely positioned `span` with two pseudo-elements (1px × 9px each), centred on the intersection with `translate(-50%, -50%)`. Use them at major intersections only (4–8 on the page).
|
|
36
|
+
4. **Grid, faint.** Optional background inside one hero cell: two `linear-gradient`s at 1px every 24px in `--rule` at half strength, masked to fade out (`mask-image: radial-gradient(...)`) so it never fills the page.
|
|
37
|
+
5. **Dimensions and callouts.** Around a product screenshot or diagram: a dimension line (1px line with 5px end ticks) and a mono label (`font-mono text-[11px] tabular-nums`). Callouts: a 1px leader to a small numbered marker, explained in a list beside the image. Real values only (the actual width, the actual latency).
|
|
38
|
+
6. **Type.** A neutral grotesk with a mono for labels; labels in uppercase only if short.
|
|
39
|
+
7. **Responsive.** On phones keep the horizontal rules, drop the vertical frame and most crosshairs; dimension labels that would collide are hidden (`max-sm:hidden`), never shrunk below 11px.
|
|
40
|
+
8. **Fallbacks.** Pure CSS; works without JS. If you draw a line in on scroll (scaleX from 0), do it only under `prefers-reduced-motion: no-preference` and with the line visible by default.
|
|
41
|
+
|
|
42
|
+
## Pitfalls
|
|
43
|
+
|
|
44
|
+
- Lines at different greys and weights: the drawing looks sloppy. One token.
|
|
45
|
+
- Crosshairs everywhere: they become noise. Mark the structure, not every div.
|
|
46
|
+
- Fake dimensions ("99.9%" on a box): a drawing that lies undermines the precision story.
|
|
47
|
+
- A full-page dotted grid: that's a generated-UI tell; keep the grid local and faded.
|
|
48
|
+
|
|
49
|
+
## How to verify
|
|
50
|
+
|
|
51
|
+
- `palate shoot`: horizontals align across sections (zoom: a continuous 1px line), crosshairs sit centred on intersections at both widths.
|
|
52
|
+
- Sample line colours: one value everywhere.
|
|
53
|
+
- Every dimension label is real text and matches the measured element.
|
|
54
|
+
|
|
55
|
+
## Examples
|
|
56
|
+
|
|
57
|
+
- palate's own critique overlay and redlines in its demo use the same language: thin emerald measure lines with numeric tags showing before and after values.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: time-of-day-theming
|
|
3
|
+
name: Time-of-day and seasonal theming
|
|
4
|
+
kind: texture
|
|
5
|
+
fits: [calm, nature, travel, local, food, consumer, warm, crafted, events]
|
|
6
|
+
avoid: [enterprise-compliance, data-dense-tool, finance-trust-first, accessibility-first]
|
|
7
|
+
signature: true
|
|
8
|
+
effort: m
|
|
9
|
+
perf: "computed once on load from the visitor's clock; token swap only; any imagery variant lazy and the same size as the default"
|
|
10
|
+
a11y: "every variant passes contrast; nothing is conveyed only by the change; no animation of the shift under reduced motion"
|
|
11
|
+
pairs_with: [museum-painting-backdrop, real-world-data, designed-dark-mode, footer-live-status]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
The page quietly changes with the visitor's local time or season: the hero sky warms at dusk, the palette deepens at night, a winter illustration appears in December, the greeting says "Good evening". It's the same page and the same layout; only the atmosphere follows the clock.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- It makes a static site feel alive and personal without asking anything of the visitor.
|
|
22
|
+
- People notice and come back to see the other versions; it's a discovery, not a feature.
|
|
23
|
+
- Tied to the brand (a café, a travel guide, a weather or nature product), it carries meaning: "we know what time it is where you are".
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for travel, food and hospitality, outdoor and nature brands, local businesses, calm consumer apps, studio portfolios, event pages counting down.
|
|
28
|
+
|
|
29
|
+
Not for: enterprise or finance pages where consistency is trust, tools people screenshot for docs and support (the screenshot won't match), or when it costs readability.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Decide the states, few.** 3–4 time bands (dawn 5–9, day 9–17, dusk 17–20, night 20–5) or 4 seasons (mind the hemisphere: derive from timezone, or don't do seasons). Each band is a set of tokens: sky gradient stops, surface tint, accent, and optionally an image variant.
|
|
34
|
+
2. **Design every state fully.** Each one is a real theme: contrast checked, imagery prepared at the same dimensions (so no layout shift), copy variants written.
|
|
35
|
+
3. **Pick on the client, early.** An inline `<head>` script reads `new Date().getHours()`, sets `document.documentElement.dataset.time = "dusk"` before paint. CSS: `:root[data-time="dusk"] { --sky-1: …; }`. Wrap in try/catch.
|
|
36
|
+
4. **Server default.** The HTML ships the "day" state, which is also the no-JS state. With static generation, never pick on the server (it would use the server's clock and cache it).
|
|
37
|
+
5. **Images.** Swap via CSS custom properties (`background-image: var(--hero-img)`) or render all variants' `<source>` lazily and show one; keep the default as the LCP image so the swap doesn't delay it.
|
|
38
|
+
6. **Transition.** None on load (the state is set before paint). If the band changes while the page is open, check once a minute and crossfade tokens over 1.2s, only under `prefers-reduced-motion: no-preference`.
|
|
39
|
+
7. **Say it, quietly.** A small line ("It's evening in your timezone, so the lights are on") or a tooltip, so the change reads as intentional, plus an optional way to see the other states.
|
|
40
|
+
|
|
41
|
+
## Pitfalls
|
|
42
|
+
|
|
43
|
+
- Night state that fails contrast or turns the page into a dark mode nobody designed.
|
|
44
|
+
- Seasons by month for the whole world: December is summer in Sydney.
|
|
45
|
+
- Hydration mismatch in React when the client renders different markup: change tokens via an attribute, not React state, or render the variant only after mount.
|
|
46
|
+
- Too many states; four well-made ones beat twelve thin ones.
|
|
47
|
+
|
|
48
|
+
## How to verify
|
|
49
|
+
|
|
50
|
+
- Emulate times (override `Date` in the browser or a `?time=dusk` debug param) and `palate shoot` each state: contrast passes, no layout shift between them.
|
|
51
|
+
- JS off: the day state renders fully.
|
|
52
|
+
- Reload at a fixed time: no flash of the day state.
|
|
53
|
+
|
|
54
|
+
## Examples
|
|
55
|
+
|
|
56
|
+
- A long-standing pattern on personal sites and weather or travel apps; no specific site cited.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: tiny-game-easter-egg
|
|
3
|
+
name: A tiny game hidden in the product
|
|
4
|
+
kind: easter-egg
|
|
5
|
+
fits: [playful, gaming, developer, community, retro, consumer, energetic, experimental]
|
|
6
|
+
avoid: [enterprise-compliance, clinical, finance-trust-first, crisis, government, calm]
|
|
7
|
+
signature: true
|
|
8
|
+
effort: l
|
|
9
|
+
perf: "lazy-loaded chunk under 15 KB gzipped; one canvas, rAF only while playing and visible; pauses on blur"
|
|
10
|
+
a11y: "fully keyboard playable; pause and quit with Esc; no flashing above 3 per second; reduced motion gets a turn-based or slowed version; never in the way of a task"
|
|
11
|
+
pairs_with: [playful-404, konami-secret, console-easter-egg]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
A small, complete, playable game hidden somewhere natural: on the 404 page, on an offline screen, behind a secret key, or inside the empty state of a product. It uses the brand's own shapes (the logo as the player, product objects as obstacles) and can be finished or high-scored in under a minute.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- Play turns a dead end (a missing page, no connection) into a moment people remember and share.
|
|
22
|
+
- Using the product's own objects makes it a brand story, not a borrowed gimmick.
|
|
23
|
+
- A tiny scope (one mechanic, one minute) means it can be polished, and polish is what makes it delightful.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for consumer, gaming, developer and community products with a playful voice; best on 404 and offline screens, where the visitor has nothing else to do.
|
|
28
|
+
|
|
29
|
+
Not for: serious, clinical, financial or crisis contexts; calm brands where it breaks the mood; or any screen where the user is mid-task. Not worth it if you can't afford the polish (a janky game is worse than none).
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **One mechanic.** Jump, dodge, catch, stack or match. Write it in one sentence ("tap to jump the logo over falling bugs"). Score is visible; a round lasts 20–60 s.
|
|
34
|
+
2. **Brand sprites.** Draw shapes in code (canvas paths or SVG) from your logo and product icons, in brand colours. No borrowed characters or sprite sheets from other games.
|
|
35
|
+
3. **Engine-free.** One `<canvas>` sized with `devicePixelRatio` (capped at 2), a fixed-timestep update (e.g. 60 Hz accumulator) and a render each rAF. Pause when `document.hidden` or the canvas leaves the viewport. Lazy-load the whole thing with dynamic import on "Play".
|
|
36
|
+
4. **Start on intent.** Show a static poster with a "Play" button; never auto-start. Space/Enter/tap to play, Esc to pause, a visible Quit.
|
|
37
|
+
5. **Controls.** Keyboard (Space, arrows) and touch (tap halves of the screen). Large hit areas on phones.
|
|
38
|
+
6. **Accessibility.** A text description of the game beside it; score announced at the end via a polite live region; no flashing over 3 Hz; reduced motion: slow speed and no screen shake, or a turn-based variant.
|
|
39
|
+
7. **High score** in `localStorage` (try/catch), never sent anywhere without consent.
|
|
40
|
+
8. **Exit routes.** The page's real purpose (links home, search) stays above the game, always visible.
|
|
41
|
+
9. **No JS:** the poster and the page's real links; no broken canvas.
|
|
42
|
+
|
|
43
|
+
## Pitfalls
|
|
44
|
+
|
|
45
|
+
- Auto-playing or capturing keys the page needs (Space scrolling).
|
|
46
|
+
- A game that loads with the page and costs everyone 200 KB.
|
|
47
|
+
- Copying a famous game's look or characters (trademark and copyright).
|
|
48
|
+
- No pause, no quit, or a canvas that keeps running in a background tab.
|
|
49
|
+
- Hiding the way back behind the game.
|
|
50
|
+
|
|
51
|
+
## How to verify
|
|
52
|
+
|
|
53
|
+
- Bundle: the game is a separate lazy chunk; the 404/offline page loads without it.
|
|
54
|
+
- Keyboard only: start, play, pause, quit.
|
|
55
|
+
- Background the tab: CPU drops to idle.
|
|
56
|
+
- `palate shoot` with JS off: poster and links, nothing broken.
|
|
57
|
+
|
|
58
|
+
## Examples
|
|
59
|
+
|
|
60
|
+
- A well-known instance is the offline dinosaur runner in Google Chrome (shown on the "no internet" page): one mechanic, the browser's own pixel art, playable with the space bar.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: type-decode-reveal
|
|
3
|
+
name: Text that decodes into place
|
|
4
|
+
kind: type
|
|
5
|
+
fits: [technical, developer, ai, experimental, retro, launch]
|
|
6
|
+
avoid: [calm, heritage, playful-kids, accessibility-first, serious-news, finance-trust-first]
|
|
7
|
+
signature: false
|
|
8
|
+
effort: s
|
|
9
|
+
perf: "a few dozen characters, one rAF loop or setInterval at ~30 fps, stops when done; monospace so nothing reflows"
|
|
10
|
+
a11y: "final text in the DOM from the start (sr-only or aria-label); scrambled glyphs aria-hidden; no effect under reduced motion"
|
|
11
|
+
pairs_with: [technical-drawing-lines, command-palette-site-nav, console-easter-egg]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
A short label, number or headline that resolves from random glyphs into its real characters, left to right, like a terminal or a split-flap board settling. Used once, on a short string: a version number, a status, a product name.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- It borrows the language of machines working, so it suits developer, security and AI products without any illustration.
|
|
22
|
+
- The resolve direction draws the eye along the text and makes a small string feel like news.
|
|
23
|
+
- It is cheap and contained: one element, a second of motion.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use for technical brands on one short string per page: a release tag ("v4.0"), a status ("Deployed"), a short product name, a key figure in a dashboard hero.
|
|
28
|
+
|
|
29
|
+
Not for paragraphs or headlines longer than ~5 words (unreadable while it runs), calm or heritage brands (it feels like a gimmick), or anything people need to read immediately (errors, prices). Never on every heading.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Render the final text** in HTML. That's the no-JS and reduced-motion state.
|
|
34
|
+
2. **Monospace or tabular.** Use a monospace font, or reserve each character's width (`display:inline-block; width:1ch` per char), so scrambling never changes the width.
|
|
35
|
+
3. **Script.** On first view (IntersectionObserver, threshold 0.6), run for 600–900ms total: each character i locks at `t_i = i * (duration / length) * 0.7 + jitter(0–60ms)`; until it locks, every ~33ms it shows a random glyph from a small set that matches the brand (`0-9A-F` for hex, `▖▗▘▙` blocks for a retro board, katakana is a cliché; avoid). Spaces and punctuation lock immediately.
|
|
36
|
+
4. **Accessibility.** Put the real string in `aria-label` on the wrapper (or an sr-only span) and mark the animated spans `aria-hidden`, so readers hear it once.
|
|
37
|
+
5. **Reduced motion.** Check `matchMedia("(prefers-reduced-motion: reduce)")` and skip entirely.
|
|
38
|
+
6. **Once.** Store that it ran (a ref, not storage); don't re-run on every scroll back.
|
|
39
|
+
|
|
40
|
+
React: a `useDecode(text, { duration })` hook returning the display string; render `<span aria-label={text}><span aria-hidden>{display}</span></span>`.
|
|
41
|
+
|
|
42
|
+
## Pitfalls
|
|
43
|
+
|
|
44
|
+
- Proportional fonts: the line jitters and neighbours reflow.
|
|
45
|
+
- Running on long text: the user waits to read.
|
|
46
|
+
- Using the Matrix look (green katakana rain): instantly dated.
|
|
47
|
+
- Re-triggering on hover forever: fun once, irritating by the third time.
|
|
48
|
+
|
|
49
|
+
## How to verify
|
|
50
|
+
|
|
51
|
+
- `palate animate --check`: the effect completes within ~1s, no layout shift.
|
|
52
|
+
- JS off / reduced motion: the final text is there from the first frame.
|
|
53
|
+
- Accessibility tree: one clean string, no random characters.
|
|
54
|
+
|
|
55
|
+
## Examples
|
|
56
|
+
|
|
57
|
+
- No public example cited; the effect is common on developer-tool launch pages and in film-title sequences.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: typographic-numeral-hero
|
|
3
|
+
name: Huge numeral as the hero
|
|
4
|
+
kind: hero
|
|
5
|
+
fits: [bold, editorial, data-rich, finance, launch, saas, honest, minimal]
|
|
6
|
+
avoid: [playful-kids, crisis, clinical, accessibility-first]
|
|
7
|
+
signature: true
|
|
8
|
+
effort: s
|
|
9
|
+
perf: "text only, no images; one display font weight subset to digits; count-up runs once, transform/text only"
|
|
10
|
+
a11y: "the number is real text with a full sentence next to it; count-up announced once as the final value; static under reduced motion"
|
|
11
|
+
pairs_with: [inline-sparklines-in-copy, dark-band-contrast-section, editorial-grid-pull-quotes]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
The first screen is built around one number set at architectural size (160–320px on desktop): the result the product delivers ("3 of 3", "41%", "11 min"), with a plain sentence beside or under it that says what the number means. The headline becomes a caption for the figure.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- A number is concrete; people can picture "11 minutes" in a way they can't picture "faster onboarding".
|
|
22
|
+
- Scale creates hierarchy without colour or imagery, so the page stays calm and still has a focal point.
|
|
23
|
+
- A true, specific figure reads as evidence. It signals that the company measures things and is willing to be held to them.
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use when the product has one honest, impressive, verifiable figure (time saved, accuracy, money returned, a count of real users) and the brand can carry confidence: finance, analytics, developer tools, launches, annual reports.
|
|
28
|
+
|
|
29
|
+
Not when the number is vanity or invented (it becomes the first thing people distrust), in crisis or health contexts where a big figure feels cold, or when the product has no single number worth leading with. Never use more than one giant number per page.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Pick the number with the user.** It must be sourced (a footnote or a "how we measured" link). Prefer a ratio or a time over a big round count.
|
|
34
|
+
2. **Set it.** One display face with tabular, lining figures (`font-variant-numeric: tabular-nums lining-nums`). Size with `clamp(96px, 18vw, 300px)`, `line-height: 0.85`, letter-spacing −0.04em to −0.06em, weight either very light (200–300) or very heavy (800–900): not the middle. Subset the font to digits and the few symbols you need.
|
|
35
|
+
3. **Layout.** Desktop: the number left, taking ~55–60% of the width, the explaining sentence right, bottom-aligned to the numeral's baseline, 18–20px, max 32ch. Phone: number on top at ~30vw, sentence under it. The signup or primary action sits under the sentence, not under the number.
|
|
36
|
+
4. **Units smaller.** Set `%`, `×`, `min` at 40–50% of the numeral size, top-aligned or baseline-aligned, so the digits stay the shape.
|
|
37
|
+
5. **Optional count-up (once).** On first view only, count from a nearby value (not from 0: 41% counts up from ~30) over 900–1200ms with an ease-out (`cubic-bezier(0.22, 1, 0.36, 1)`). Write the final value in the HTML so no-JS and reduced-motion see it; JS swaps in the start value before first paint only when motion is allowed. Wrap the visual number in `aria-hidden` and provide the real value in a visually hidden span so screen readers hear it once.
|
|
38
|
+
6. **Source line.** 12–13px under the sentence: "Measured across 214 teams, Jan–Sep 2026."
|
|
39
|
+
|
|
40
|
+
React/Tailwind: `text-[clamp(96px,18vw,300px)] leading-[0.85] tracking-[-0.05em] tabular-nums`; reserve width with `min-w-[Nch]` so the count-up doesn't reflow.
|
|
41
|
+
|
|
42
|
+
## Pitfalls
|
|
43
|
+
|
|
44
|
+
- Counting up from zero on every scroll: gimmicky and it hides the value. Once, from close by.
|
|
45
|
+
- Proportional figures: the number jitters as it counts. Use tabular figures.
|
|
46
|
+
- A number with no sentence: big but meaningless.
|
|
47
|
+
- Three giant stats in a row: that's a stats band, not a hero; one wins.
|
|
48
|
+
- Default system font at 300px looks unfinished; this move depends on a well-drawn face.
|
|
49
|
+
|
|
50
|
+
## How to verify
|
|
51
|
+
|
|
52
|
+
- `palate shoot` at 1440 and 390: the numeral is the largest element, nothing overflows horizontally at 320, the sentence is readable next to it.
|
|
53
|
+
- `palate animate --check`: no layout shift during the count; JS off and reduced motion show the final value.
|
|
54
|
+
- Screen reader reads the number and sentence once, not every frame.
|
|
55
|
+
|
|
56
|
+
## Examples
|
|
57
|
+
|
|
58
|
+
- palate's own site: the taste section leads with one large "3 of 3" beside the sentence that explains it (the founder's blind picks), the rest of the figures a step smaller.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: view-transitions-between-pages
|
|
3
|
+
name: View transitions between pages
|
|
4
|
+
kind: navigation
|
|
5
|
+
fits: [crafted, editorial, portfolio, premium, publishing, ecommerce, agency, calm]
|
|
6
|
+
avoid: [data-dense-tool, enterprise-compliance, low-bandwidth]
|
|
7
|
+
signature: false
|
|
8
|
+
effort: s
|
|
9
|
+
perf: "browser-native snapshots; a few named elements at most; 200–300 ms; zero JS for MPA cross-document transitions"
|
|
10
|
+
a11y: "progressive enhancement: unsupported browsers navigate normally; reduced motion removes the animation; focus and scroll handled by the router as usual"
|
|
11
|
+
pairs_with: [calm-motion-system, shape-continuity-morph, changelog-as-magazine, editorial-grid-pull-quotes]
|
|
12
|
+
deps: none
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What it is
|
|
16
|
+
|
|
17
|
+
Moving between pages feels like one continuous place: the thumbnail you clicked grows into the article's lead image, the title slides into the heading position, the rest cross-fades. Built on the browser's View Transitions API, so it's a few lines of CSS rather than an animation framework.
|
|
18
|
+
|
|
19
|
+
## Why it works
|
|
20
|
+
|
|
21
|
+
- A hard page cut breaks the reader's attention; a shared element carries it across, so they never lose their place.
|
|
22
|
+
- It makes a static or server-rendered site feel like an app without the weight of one.
|
|
23
|
+
- Because only one or two elements travel, it feels intentional rather than "animated site".
|
|
24
|
+
|
|
25
|
+
## When to use / when not
|
|
26
|
+
|
|
27
|
+
Use on portfolios, galleries, product grids → product pages, blog index → post, case-study lists. Anywhere a list item and its page share an image or title.
|
|
28
|
+
|
|
29
|
+
Not for: dense tools where navigation must be instant, pages where the shared element changes size by 10× (it reads as a zoom), or as a reason to delay navigation.
|
|
30
|
+
|
|
31
|
+
## Recipe
|
|
32
|
+
|
|
33
|
+
1. **Cross-document (MPA, Astro, plain Next links with full loads).** In global CSS of both pages: `@view-transition { navigation: auto; }`. That alone cross-fades same-origin navigations (Chromium 126+, Safari 18.2+; others just navigate).
|
|
34
|
+
2. **Name the shared element.** On the list card's image: `style={{ viewTransitionName: \`work-${slug}\` }}`; on the detail page's hero image, the same name. Names must be unique on each page. Do the same for the title if it travels (`work-title-${slug}`).
|
|
35
|
+
3. **Same-document (SPA routers).** Wrap the navigation: `document.startViewTransition(() => navigate(href))` (React Router has `viewTransition` on `<Link>`; for Next App Router, use a small client `Link` wrapper that calls `startViewTransition` around `router.push` and awaits the new route's render, or use the experimental `viewTransition` flag if the project's Next version supports it). Feature-test first.
|
|
36
|
+
4. **Timing.** `::view-transition-group(*) { animation-duration: 260ms; animation-timing-function: cubic-bezier(.23,1,.32,1); }`. Root cross-fade 180 ms. Keep the old page's fade-out shorter than the new page's fade-in.
|
|
37
|
+
5. **Aspect changes.** If the card is 4:3 and the hero 16:9, set `object-fit: cover` on both and style `::view-transition-old/new(work-x) { height: 100%; object-fit: cover; }` so the image doesn't squash mid-flight.
|
|
38
|
+
6. **Reduced motion.** `@media (prefers-reduced-motion: reduce) { ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; } }`.
|
|
39
|
+
7. **No JS / unsupported.** Nothing to do: links are links. Never block navigation waiting for a transition.
|
|
40
|
+
|
|
41
|
+
## Pitfalls
|
|
42
|
+
|
|
43
|
+
- Naming every card on the index with the same name: the transition aborts. Names are per item.
|
|
44
|
+
- Transitioning the whole page with a slide: slow and nauseating. Only cross-fade the root; move just the shared element.
|
|
45
|
+
- Slow server responses: the old page sits frozen with nothing happening. Keep the transition for fast routes or show the router's pending state.
|
|
46
|
+
- Fixed headers caught in the root snapshot flicker; give the header its own `view-transition-name: header` so it stays still.
|
|
47
|
+
|
|
48
|
+
## How to verify
|
|
49
|
+
|
|
50
|
+
- `palate animate --check` across a list → detail navigation: the shared image moves continuously; no frame where both pages are blank.
|
|
51
|
+
- Firefox / older Safari: navigation works normally, no errors.
|
|
52
|
+
- Reduced motion on: instant navigation.
|
|
53
|
+
- Back button: the element travels back to its card.
|
|
54
|
+
|
|
55
|
+
## Examples
|
|
56
|
+
|
|
57
|
+
- The pattern: a grid of case-study thumbnails where the clicked image expands into the case study's full-width lead image, with the title gliding into place and everything else cross-fading.
|