{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "abdisamadjoe",
  "homepage": "https://abdisamadjoe.com/components",
  "items": [
    {
      "name": "haptic",
      "title": "Haptic Feedback",
      "description": "Trigger haptic feedback on mobile devices.",
      "files": [
        {
          "path": "src/registry/lib/haptic/haptic.ts",
          "type": "registry:lib",
          "target": "@lib/haptic.ts"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/haptic-feedback",
      "categories": [
        "utilities"
      ],
      "type": "registry:lib",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "use-sound",
      "title": "useSound",
      "description": "Hook for playing sound effects with volume, playback rate, and interrupt controls.",
      "files": [
        {
          "path": "src/registry/hooks/sound/use-sound.ts",
          "type": "registry:hook",
          "target": "@hooks/sound/use-sound.ts"
        },
        {
          "path": "src/registry/lib/sound/sound-engine.ts",
          "type": "registry:lib",
          "target": "@lib/sound/sound-engine.ts"
        },
        {
          "path": "src/registry/lib/sound/sound-types.ts",
          "type": "registry:lib",
          "target": "@lib/sound/sound-types.ts"
        }
      ],
      "type": "registry:hook",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "text-flip",
      "title": "Text Flip",
      "description": "Animated text that cycles through items with a smooth flip transition.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "src/registry/components/text-flip/text-flip.tsx",
          "type": "registry:component",
          "target": "@components/text-flip.tsx"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/text-flip",
      "categories": [
        "text-effects"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "chevrons-up-down-icon",
      "description": "Animated chevrons icon that morphs between up and down directions.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "src/registry/components/chevrons-up-down-icon/chevrons-up-down-icon.tsx",
          "type": "registry:component",
          "target": "@components/chevrons-up-down-icon.tsx"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/chevrons-up-down-icon",
      "categories": [
        "effects"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "testimonial",
      "title": "Testimonial",
      "description": "Display user feedback with author info, avatar, and verified badge.",
      "files": [
        {
          "path": "src/registry/components/testimonial/testimonial.tsx",
          "type": "registry:component",
          "target": "@components/testimonial.tsx"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/testimonial",
      "categories": [
        "marketing"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "copy-button",
      "title": "Copy Button",
      "description": "Copy text to clipboard with visual, haptic, and audio feedback.",
      "dependencies": [
        "motion",
        "@rexa-developer/tiks",
        "web-haptics"
      ],
      "registryDependencies": [
        "button",
        "https://abdisamadjoe.com/r/icon-swap.json"
      ],
      "files": [
        {
          "path": "src/registry/components/copy-button/copy-button.tsx",
          "type": "registry:component",
          "target": "@components/copy-button.tsx"
        },
        {
          "path": "src/hooks/use-copy-to-clipboard.ts",
          "type": "registry:hook",
          "target": "@hooks/use-copy-to-clipboard.ts"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/copy-button",
      "categories": [
        "utilities"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "testimonial-spotlight",
      "title": "Testimonial Spotlight",
      "description": "Testimonial card with spotlight effect on hover.",
      "registryDependencies": [
        "https://abdisamadjoe.com/r/testimonial.json"
      ],
      "files": [
        {
          "path": "src/registry/components/testimonial-spotlight/testimonial-spotlight.tsx",
          "type": "registry:component",
          "target": "@components/testimonial-spotlight.tsx"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/testimonial-spotlight",
      "categories": [
        "marketing"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "glow-card-grid",
      "title": "Glow Card Grid",
      "description": "Display cards with glowing border and background effects.",
      "files": [
        {
          "path": "src/registry/components/glow-card-grid/glow-card-grid.tsx",
          "type": "registry:component",
          "target": "@components/glow-card-grid.tsx"
        }
      ],
      "categories": [
        "effects"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "middle-truncation",
      "title": "Middle Truncation",
      "description": "Truncate text in the middle while preserving start and end.",
      "files": [
        {
          "path": "src/registry/components/middle-truncation/middle-truncation.tsx",
          "type": "registry:component",
          "target": "@components/middle-truncation.tsx"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/middle-truncation",
      "categories": [
        "typography"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "twemoji",
      "title": "Twemoji",
      "description": "Render Unicode emoji as Twemoji SVG images inline with text.",
      "files": [
        {
          "path": "src/registry/components/twemoji/twemoji.tsx",
          "type": "registry:component",
          "target": "@components/twemoji.tsx"
        },
        {
          "path": "src/registry/components/twemoji/lib/twemoji-regex.ts",
          "type": "registry:lib",
          "target": "@lib/twemoji-regex.ts"
        }
      ],
      "css": {
        "@layer base": {
          ".twemoji": {
            "display": "inline-block",
            "height": "1em",
            "width": "1em",
            "margin": "0 0.05em 0 0.1em",
            "vertical-align": "-0.1em"
          }
        }
      },
      "docs": "https://abdisamadjoe.com/components/twemoji",
      "categories": [
        "typography"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "contribution-graph",
      "title": "Contribution Graph",
      "description": "A GitHub-style contribution graph component that displays activity levels over time.",
      "dependencies": [
        "date-fns"
      ],
      "files": [
        {
          "path": "src/registry/components/contribution-graph/contribution-graph.tsx",
          "type": "registry:component",
          "target": "@components/contribution-graph.tsx"
        }
      ],
      "docs": "https://www.kibo-ui.com/components/contribution-graph",
      "categories": [
        "data-display"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "github-contributions",
      "title": "GitHub Contributions",
      "description": "Visualize year-long GitHub contribution activity with daily counts, tooltips, and a profile link.",
      "dependencies": [
        "date-fns"
      ],
      "registryDependencies": [
        "tooltip",
        "spinner",
        "https://abdisamadjoe.com/r/contribution-graph.json"
      ],
      "files": [
        {
          "path": "src/registry/components/github-contributions/github-contributions.tsx",
          "type": "registry:component",
          "target": "@components/github-contributions.tsx"
        },
        {
          "path": "src/registry/components/github-contributions/lib/get-cached-contributions.ts",
          "type": "registry:lib",
          "target": "@lib/get-cached-contributions.ts"
        }
      ],
      "css": {
        "@utility link-underline": {
          "@apply underline decoration-current/30 decoration-1 underline-offset-3 transition-colors hover:decoration-current": {}
        }
      },
      "docs": "https://abdisamadjoe.com/components/github-contributions",
      "categories": [
        "data-display"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "icon-swap",
      "title": "Icon Swap",
      "description": "Animate icon swaps with scale, blur, and fade transitions.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "src/registry/components/icon-swap/icon-swap.tsx",
          "type": "registry:component",
          "target": "@components/icon-swap.tsx"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/icon-swap",
      "categories": [
        "effects"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "spinning-circular-text",
      "title": "Spinning Circular Text",
      "description": "Text arranged in a circle with a continuous spinning animation.",
      "files": [
        {
          "path": "src/registry/components/spinning-circular-text/spinning-circular-text.tsx",
          "type": "registry:component",
          "target": "@components/spinning-circular-text.tsx"
        }
      ],
      "cssVars": {
        "theme": {
          "--animate-spin-ccw": "spin-ccw var(--tw-animation-duration, var(--tw-duration, 6s)) linear infinite"
        }
      },
      "css": {
        "@keyframes spin-ccw": {
          "to": {
            "rotate": "-360deg"
          }
        }
      },
      "docs": "https://abdisamadjoe.com/components/spinning-circular-text",
      "categories": [
        "text-effects"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "logos-carousel",
      "title": "Logos Carousel",
      "description": "Cycle through logos column by column in a staggered wave.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "src/registry/components/logos-carousel/logos-carousel.tsx",
          "type": "registry:component",
          "target": "@components/logos-carousel.tsx"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/logos-carousel",
      "categories": [
        "marketing"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "testimonial-2",
      "title": "Testimonial 2",
      "description": "Display a testimonial quote with author attribution and source link.",
      "files": [
        {
          "path": "src/registry/components/testimonial-2/testimonial-2.tsx",
          "type": "registry:component",
          "target": "@components/testimonial-2.tsx"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/testimonial-2",
      "categories": [
        "marketing"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "timescale",
      "title": "Timescale",
      "description": "Ruler-style timeline for plotting milestones along a horizontal or vertical axis.",
      "files": [
        {
          "path": "src/registry/components/timescale/timescale.tsx",
          "type": "registry:component",
          "target": "@components/timescale.tsx"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/timescale",
      "categories": [
        "data-display"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "work-experience",
      "title": "Work Experience",
      "description": "Display work experiences with role details, company logos, and durations.",
      "dependencies": [
        "react-markdown",
        "date-fns"
      ],
      "registryDependencies": [
        "collapsible",
        "separator",
        "https://abdisamadjoe.com/r/chevrons-up-down-icon.json"
      ],
      "files": [
        {
          "path": "src/registry/components/work-experience/work-experience.tsx",
          "type": "registry:component",
          "target": "@components/work-experience.tsx"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/work-experience-component",
      "categories": [
        "marketing"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "dot-grid-spotlight",
      "title": "Dot Grid Spotlight",
      "description": "Interactive dot grid with a cursor-tracking spotlight effect.",
      "files": [
        {
          "path": "src/registry/components/dot-grid-spotlight/dot-grid-spotlight.tsx",
          "type": "registry:component",
          "target": "@components/dot-grid-spotlight.tsx"
        }
      ],
      "docs": "https://abdisamadjoe.com/components/dot-grid-spotlight",
      "categories": [
        "effects"
      ],
      "type": "registry:component",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "login-01",
      "title": "Login 01",
      "description": "A simple login form.",
      "registryDependencies": [
        "button",
        "card",
        "input",
        "label",
        "field"
      ],
      "files": [
        {
          "path": "src/registry/blocks/login-01/page.tsx",
          "type": "registry:page",
          "target": "app/login/page.tsx"
        },
        {
          "path": "src/registry/blocks/login-01/components/login-form.tsx",
          "type": "registry:component",
          "target": "@components/login-form.tsx"
        }
      ],
      "meta": {
        "createdAt": "2026-02-22"
      },
      "categories": [
        "application"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "hero-01",
      "title": "Hero 01",
      "description": "A hero section with a golden spiral background.",
      "registryDependencies": [
        "button",
        "https://abdisamadjoe.com/r/style.json"
      ],
      "files": [
        {
          "path": "src/registry/blocks/hero-01/hero-01.tsx",
          "type": "registry:component",
          "target": "@components/hero-01.tsx"
        },
        {
          "path": "src/registry/blocks/hero-01/components/hero-01-icons.tsx",
          "type": "registry:component",
          "target": "@components/hero-01-icons.tsx"
        }
      ],
      "meta": {
        "createdAt": "2026-03-12"
      },
      "categories": [
        "marketing"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "blog-01",
      "title": "Blog 01",
      "description": "A blog section with a grid layout.",
      "dependencies": [
        "date-fns"
      ],
      "registryDependencies": [
        "button"
      ],
      "files": [
        {
          "path": "src/registry/blocks/blog-01/blog-01.tsx",
          "type": "registry:component",
          "target": "@components/blog-01.tsx"
        },
        {
          "path": "src/registry/blocks/blog-01/components/article-item.tsx",
          "type": "registry:component",
          "target": "@components/article-item.tsx"
        }
      ],
      "meta": {
        "createdAt": "2026-03-13"
      },
      "categories": [
        "marketing"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "blog-02",
      "title": "Blog 02",
      "description": "A blog section with a lined grid layout.",
      "dependencies": [
        "date-fns"
      ],
      "registryDependencies": [
        "button",
        "https://abdisamadjoe.com/r/style.json"
      ],
      "files": [
        {
          "path": "src/registry/blocks/blog-02/blog-02.tsx",
          "type": "registry:component",
          "target": "@components/blog-02.tsx"
        },
        {
          "path": "src/registry/blocks/blog-02/components/article-item.tsx",
          "type": "registry:component",
          "target": "@components/article-item.tsx"
        }
      ],
      "meta": {
        "createdAt": "2026-03-18"
      },
      "categories": [
        "marketing"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "testimonials-01",
      "title": "Testimonials 01",
      "description": "A testimonials section with dual marquees.",
      "registryDependencies": [
        "https://www.kibo-ui.com/r/marquee.json",
        "https://abdisamadjoe.com/r/testimonial-spotlight.json"
      ],
      "files": [
        {
          "path": "src/registry/blocks/testimonials-01/testimonials-01.tsx",
          "type": "registry:component",
          "target": "@components/testimonials-01.tsx"
        },
        {
          "path": "src/registry/blocks/testimonials-01/components/testimonial-list.tsx",
          "type": "registry:component",
          "target": "@components/testimonial-list.tsx"
        }
      ],
      "meta": {
        "createdAt": "2026-03-20",
        "previewClassName": "container mx-auto min-h-svh content-center-safe"
      },
      "categories": [
        "marketing"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "testimonials-02",
      "title": "Testimonials 02",
      "description": "A testimonials section with a lined layout.",
      "registryDependencies": [
        "https://www.kibo-ui.com/r/marquee.json",
        "https://abdisamadjoe.com/r/style.json",
        "https://abdisamadjoe.com/r/testimonial.json"
      ],
      "files": [
        {
          "path": "src/registry/blocks/testimonials-02/testimonials-02.tsx",
          "type": "registry:component",
          "target": "@components/testimonials-02.tsx"
        },
        {
          "path": "src/registry/blocks/testimonials-02/components/testimonial-list.tsx",
          "type": "registry:component",
          "target": "@components/testimonial-list.tsx"
        }
      ],
      "meta": {
        "createdAt": "2026-03-29",
        "previewClassName": "min-h-svh content-center-safe"
      },
      "categories": [
        "marketing"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "experience-01",
      "title": "Experience 01",
      "description": "A work experience section with a lined layout.",
      "registryDependencies": [
        "https://abdisamadjoe.com/r/style.json",
        "https://abdisamadjoe.com/r/work-experience.json"
      ],
      "files": [
        {
          "path": "src/registry/blocks/experience-01/experience-01.tsx",
          "type": "registry:component",
          "target": "@components/experience-01.tsx"
        }
      ],
      "meta": {
        "createdAt": "2026-03-28"
      },
      "categories": [
        "marketing"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "team-01",
      "title": "Team 01",
      "description": "A team section with glowing cards.",
      "registryDependencies": [
        "https://abdisamadjoe.com/r/glow-card-grid.json"
      ],
      "files": [
        {
          "path": "src/registry/blocks/team-01/team-01.tsx",
          "type": "registry:component",
          "target": "@components/team-01.tsx"
        }
      ],
      "meta": {
        "createdAt": "2026-03-30",
        "previewClassName": "min-h-svh place-items-center-safe content-center-safe"
      },
      "categories": [
        "marketing"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "metrics-01",
      "title": "Metrics 01",
      "description": "A metrics section with a line chart.",
      "dependencies": [
        "date-fns"
      ],
      "registryDependencies": [
        "@bklit/line-chart",
        "https://abdisamadjoe.com/r/style.json"
      ],
      "files": [
        {
          "path": "src/registry/blocks/metrics-01/metrics-01.tsx",
          "type": "registry:component",
          "target": "@components/metrics-01.tsx"
        },
        {
          "path": "src/registry/blocks/metrics-01/components/metric.tsx",
          "type": "registry:component",
          "target": "@components/metric.tsx"
        }
      ],
      "meta": {
        "createdAt": "2026-05-24",
        "previewClassName": "min-h-svh content-center-safe"
      },
      "categories": [
        "marketing"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "social-links-01",
      "title": "Social Links 01",
      "description": "A social links section with a lined grid layout.",
      "registryDependencies": [
        "https://abdisamadjoe.com/r/style.json"
      ],
      "files": [
        {
          "path": "src/registry/blocks/social-links-01/social-links-01.tsx",
          "type": "registry:component",
          "target": "@components/social-links-01.tsx"
        }
      ],
      "meta": {
        "createdAt": "2026-06-16",
        "previewClassName": "min-h-svh content-center-safe"
      },
      "categories": [
        "marketing"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "social-proof-01",
      "title": "Social Proof 01",
      "description": "A social proof section with a logos carousel.",
      "registryDependencies": [
        "https://abdisamadjoe.com/r/logos-carousel.json"
      ],
      "files": [
        {
          "path": "src/registry/blocks/social-proof-01/social-proof-01.tsx",
          "type": "registry:component",
          "target": "@components/social-proof-01.tsx"
        }
      ],
      "meta": {
        "createdAt": "2026-06-26",
        "previewClassName": "min-h-svh content-center-safe"
      },
      "categories": [
        "marketing"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "not-found-01",
      "title": "Not Found 01",
      "description": "A 404 page with a playable brick breaker game.",
      "dependencies": [
        "p5@^1.9.4",
        "motion",
        "next-themes"
      ],
      "devDependencies": [
        "@types/p5@^1.7.7"
      ],
      "registryDependencies": [
        "button",
        "empty"
      ],
      "files": [
        {
          "path": "src/registry/blocks/not-found-01/page.tsx",
          "type": "registry:page",
          "target": "app/not-found.tsx"
        },
        {
          "path": "src/registry/blocks/not-found-01/components/daikanoid/index.tsx",
          "type": "registry:component",
          "target": "@components/daikanoid/index.tsx"
        },
        {
          "path": "src/registry/blocks/not-found-01/components/daikanoid/component.tsx",
          "type": "registry:component",
          "target": "@components/daikanoid/component.tsx"
        },
        {
          "path": "src/registry/blocks/not-found-01/components/daikanoid/ball.ts",
          "type": "registry:component",
          "target": "@components/daikanoid/ball.ts"
        },
        {
          "path": "src/registry/blocks/not-found-01/components/daikanoid/brick.ts",
          "type": "registry:component",
          "target": "@components/daikanoid/brick.ts"
        },
        {
          "path": "src/registry/blocks/not-found-01/components/daikanoid/paddle.ts",
          "type": "registry:component",
          "target": "@components/daikanoid/paddle.ts"
        },
        {
          "path": "src/registry/blocks/not-found-01/components/daikanoid/logos.ts",
          "type": "registry:component",
          "target": "@components/daikanoid/logos.ts"
        },
        {
          "path": "src/registry/blocks/not-found-01/components/daikanoid/colors.ts",
          "type": "registry:component",
          "target": "@components/daikanoid/colors.ts"
        },
        {
          "path": "src/registry/blocks/not-found-01/components/daikanoid/constants.ts",
          "type": "registry:component",
          "target": "@components/daikanoid/constants.ts"
        },
        {
          "path": "src/registry/blocks/not-found-01/components/daikanoid/types.ts",
          "type": "registry:component",
          "target": "@components/daikanoid/types.ts"
        },
        {
          "path": "src/registry/blocks/not-found-01/components/daikanoid/ui.ts",
          "type": "registry:component",
          "target": "@components/daikanoid/ui.ts"
        }
      ],
      "cssVars": {
        "light": {
          "dk-background": "#ffffff",
          "dk-foreground": "#09090b",
          "dk-muted-foreground": "#a1a1aa",
          "dk-brick": "#a1a1aa",
          "dk-brick-highlight": "rgba(255, 255, 255, 0.5)",
          "dk-brick-shadow": "#71717a"
        },
        "dark": {
          "dk-background": "#09090b",
          "dk-foreground": "#fafafa",
          "dk-muted-foreground": "#71717a",
          "dk-brick": "#71717a",
          "dk-brick-highlight": "rgba(255, 255, 255, 0.3)",
          "dk-brick-shadow": "#3f3f46"
        }
      },
      "meta": {
        "createdAt": "2026-08-09"
      },
      "categories": [
        "application"
      ],
      "type": "registry:block",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>"
    },
    {
      "name": "style",
      "cssVars": {
        "theme": {
          "color-line": "color-mix(in oklab, var(--border) 64%, var(--background))"
        }
      },
      "css": {
        "@utility screen-line-top": {
          "@apply relative before:absolute before:top-0 before:left-[-100vw] before:-z-1 before:h-px before:w-[200vw] before:bg-line": {}
        },
        "@utility screen-line-bottom": {
          "@apply relative after:absolute after:bottom-0 after:left-[-100vw] after:-z-1 after:h-px after:w-[200vw] after:bg-line": {}
        }
      },
      "type": "registry:style",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>",
      "files": []
    },
    {
      "name": "theme-toggle-effect-triangle",
      "cssVars": {
        "theme": {
          "expo-out": "linear(0 0%, 0.1684 2.66%, 0.3165 5.49%, 0.446 8.52%, 0.5581 11.78%, 0.6535 15.29%, 0.7341 19.11%, 0.8011 23.3%, 0.8557 27.93%, 0.8962 32.68%, 0.9283 38.01%, 0.9529 44.08%, 0.9711 51.14%, 0.9833 59.06%, 0.9915 68.74%, 1 100%)"
        }
      },
      "css": {
        "@layer base": {
          "::view-transition-group(root)": {
            "animation-timing-function": "var(--expo-out)"
          },
          "::view-transition-old(root),.dark::view-transition-old(root)": {
            "animation": "none",
            "animation-fill-mode": "both",
            "z-index": "-1"
          },
          "::view-transition-new(root)": {
            "mask": "url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 40 40\"><path d=\"m20 0 20 35H0z\" fill=\"white\"/></svg>') center / 0 no-repeat",
            "animation": "scale 0.7s",
            "animation-fill-mode": "both"
          },
          "@keyframes scale": {
            "to": {
              "mask-size": "300vmax"
            }
          }
        }
      },
      "docs": "https://abdisamadjoe.com/components/theme-toggle-effect",
      "categories": [
        "effects"
      ],
      "type": "registry:style",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>",
      "files": []
    },
    {
      "name": "theme-toggle-effect-triangle-blur",
      "cssVars": {
        "theme": {
          "expo-out": "linear(0 0%, 0.1684 2.66%, 0.3165 5.49%, 0.446 8.52%, 0.5581 11.78%, 0.6535 15.29%, 0.7341 19.11%, 0.8011 23.3%, 0.8557 27.93%, 0.8962 32.68%, 0.9283 38.01%, 0.9529 44.08%, 0.9711 51.14%, 0.9833 59.06%, 0.9915 68.74%, 1 100%)"
        }
      },
      "css": {
        "@layer base": {
          "::view-transition-group(root)": {
            "animation-timing-function": "var(--expo-out)"
          },
          "::view-transition-old(root),.dark::view-transition-old(root)": {
            "animation": "none",
            "animation-fill-mode": "both",
            "z-index": "-1"
          },
          "::view-transition-new(root)": {
            "mask": "url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 40 40\"><path d=\"m20 0 20 35H0z\" fill=\"white\" filter=\"url(%23blur)\"/><defs><filter id=\"blur\"><feGaussianBlur stdDeviation=\"1\"/></filter></defs></svg>') center / 0 no-repeat",
            "animation": "scale 0.7s",
            "animation-fill-mode": "both"
          },
          "@keyframes scale": {
            "to": {
              "mask-size": "300vmax"
            }
          }
        }
      },
      "docs": "https://abdisamadjoe.com/components/theme-toggle-effect",
      "categories": [
        "effects"
      ],
      "type": "registry:style",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>",
      "files": []
    },
    {
      "name": "theme-toggle-effect-circle",
      "cssVars": {
        "theme": {
          "expo-out": "linear(0 0%, 0.1684 2.66%, 0.3165 5.49%, 0.446 8.52%, 0.5581 11.78%, 0.6535 15.29%, 0.7341 19.11%, 0.8011 23.3%, 0.8557 27.93%, 0.8962 32.68%, 0.9283 38.01%, 0.9529 44.08%, 0.9711 51.14%, 0.9833 59.06%, 0.9915 68.74%, 1 100%)"
        }
      },
      "css": {
        "@layer base": {
          "::view-transition-group(root)": {
            "animation-timing-function": "var(--expo-out)"
          },
          "::view-transition-old(root),.dark::view-transition-old(root)": {
            "animation": "none",
            "animation-fill-mode": "both",
            "z-index": "-1"
          },
          "::view-transition-new(root)": {
            "mask": "url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 40 40\"><circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"white\"/></svg>') center / 0 no-repeat",
            "animation": "scale 1s",
            "animation-fill-mode": "both"
          },
          "@keyframes scale": {
            "to": {
              "mask-size": "200vmax"
            }
          }
        }
      },
      "docs": "https://abdisamadjoe.com/components/theme-toggle-effect",
      "categories": [
        "effects"
      ],
      "type": "registry:style",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>",
      "files": []
    },
    {
      "name": "theme-toggle-effect-circle-blur",
      "cssVars": {
        "theme": {
          "expo-out": "linear(0 0%, 0.1684 2.66%, 0.3165 5.49%, 0.446 8.52%, 0.5581 11.78%, 0.6535 15.29%, 0.7341 19.11%, 0.8011 23.3%, 0.8557 27.93%, 0.8962 32.68%, 0.9283 38.01%, 0.9529 44.08%, 0.9711 51.14%, 0.9833 59.06%, 0.9915 68.74%, 1 100%)"
        }
      },
      "css": {
        "@layer base": {
          "::view-transition-group(root)": {
            "animation-timing-function": "var(--expo-out)"
          },
          "::view-transition-old(root),.dark::view-transition-old(root)": {
            "animation": "none",
            "animation-fill-mode": "both",
            "z-index": "-1"
          },
          "::view-transition-new(root)": {
            "mask": "url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 40 40\"><defs><filter id=\"blur\"><feGaussianBlur stdDeviation=\"2\"/></filter></defs><circle cx=\"20\" cy=\"20\" r=\"18\" fill=\"white\" filter=\"url(%23blur)\"/></svg>') center / 0 no-repeat",
            "animation": "scale 1s",
            "animation-fill-mode": "both"
          },
          ".dark::view-transition-new(root)": {
            "animation": "scale 1s",
            "animation-fill-mode": "both"
          },
          "@keyframes scale": {
            "to": {
              "mask-size": "200vmax"
            }
          }
        }
      },
      "docs": "https://abdisamadjoe.com/components/theme-toggle-effect",
      "categories": [
        "effects"
      ],
      "type": "registry:style",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>",
      "files": []
    },
    {
      "name": "theme-toggle-effect-circle-blur-top-left",
      "cssVars": {
        "theme": {
          "expo-out": "linear(0 0%, 0.1684 2.66%, 0.3165 5.49%, 0.446 8.52%, 0.5581 11.78%, 0.6535 15.29%, 0.7341 19.11%, 0.8011 23.3%, 0.8557 27.93%, 0.8962 32.68%, 0.9283 38.01%, 0.9529 44.08%, 0.9711 51.14%, 0.9833 59.06%, 0.9915 68.74%, 1 100%)"
        }
      },
      "css": {
        "@layer base": {
          "::view-transition-group(root)": {
            "animation-timing-function": "var(--expo-out)"
          },
          "::view-transition-new(root)": {
            "mask": "url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 40 40\"><defs><filter id=\"blur\"><feGaussianBlur stdDeviation=\"2\"/></filter></defs><circle cx=\"0\" cy=\"0\" r=\"18\" fill=\"white\" filter=\"url(%23blur)\"/></svg>') top left / 0 no-repeat",
            "mask-origin": "content-box",
            "animation": "scale 1s",
            "animation-fill-mode": "both",
            "transform-origin": "top left"
          },
          "::view-transition-old(root),.dark::view-transition-old(root)": {
            "animation": "scale 1s",
            "animation-fill-mode": "both",
            "transform-origin": "top left",
            "z-index": "-1"
          },
          "@keyframes scale": {
            "to": {
              "mask-size": "350vmax"
            }
          }
        }
      },
      "docs": "https://abdisamadjoe.com/components/theme-toggle-effect",
      "categories": [
        "effects"
      ],
      "type": "registry:style",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>",
      "files": []
    },
    {
      "name": "theme-toggle-effect-polygon",
      "cssVars": {
        "theme": {
          "expo-out": "linear(0 0%, 0.1684 2.66%, 0.3165 5.49%, 0.446 8.52%, 0.5581 11.78%, 0.6535 15.29%, 0.7341 19.11%, 0.8011 23.3%, 0.8557 27.93%, 0.8962 32.68%, 0.9283 38.01%, 0.9529 44.08%, 0.9711 51.14%, 0.9833 59.06%, 0.9915 68.74%, 1 100%)"
        }
      },
      "css": {
        "@layer base": {
          "::view-transition-group(root)": {
            "animation-duration": "0.7s",
            "animation-timing-function": "var(--expo-out)"
          },
          "::view-transition-new(root)": {
            "animation-name": "reveal-light",
            "animation-fill-mode": "both"
          },
          "::view-transition-old(root),.dark::view-transition-old(root)": {
            "animation": "none",
            "animation-fill-mode": "both",
            "z-index": "-1"
          },
          ".dark::view-transition-new(root)": {
            "animation-name": "reveal-dark",
            "animation-fill-mode": "both"
          },
          "@keyframes reveal-dark": {
            "from": {
              "clip-path": "polygon(50% -71%, -50% 71%, -50% 71%, 50% -71%)"
            },
            "to": {
              "clip-path": "polygon(50% -71%, -50% 71%, 50% 171%, 171% 50%)"
            }
          },
          "@keyframes reveal-light": {
            "from": {
              "clip-path": "polygon(171% 50%, 50% 171%, 50% 171%, 171% 50%)"
            },
            "to": {
              "clip-path": "polygon(171% 50%, 50% 171%, -50% 71%, 50% -71%)"
            }
          }
        }
      },
      "docs": "https://abdisamadjoe.com/components/theme-toggle-effect",
      "categories": [
        "effects"
      ],
      "type": "registry:style",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>",
      "files": []
    },
    {
      "name": "theme-toggle-effect-polygon-gradient",
      "cssVars": {
        "theme": {
          "expo-out": "linear(0 0%, 0.1684 2.66%, 0.3165 5.49%, 0.446 8.52%, 0.5581 11.78%, 0.6535 15.29%, 0.7341 19.11%, 0.8011 23.3%, 0.8557 27.93%, 0.8962 32.68%, 0.9283 38.01%, 0.9529 44.08%, 0.9711 51.14%, 0.9833 59.06%, 0.9915 68.74%, 1 100%)"
        }
      },
      "css": {
        "@layer base": {
          "::view-transition-group(root)": {
            "animation-timing-function": "var(--expo-out)"
          },
          "::view-transition-new(root)": {
            "mask": "url('data:image/svg+xml,<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0H40L0 40V0Z\" fill=\"url(%23paint0_linear_16_14)\"/><defs><linearGradient id=\"paint0_linear_16_14\" x1=\"0\" y1=\"0\" x2=\"20.5\" y2=\"20.5\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"current\"/><stop offset=\"0.84506\" stop-color=\"current\" stop-opacity=\"0.99\"/><stop offset=\"0.9506\" stop-color=\"current\" stop-opacity=\"0\"/><stop offset=\"1\" stop-color=\"current\" stop-opacity=\"0\"/></linearGradient></defs></svg>') top left / 0 no-repeat",
            "mask-origin": "top left",
            "animation": "scale 1.5s",
            "animation-fill-mode": "both"
          },
          "::view-transition-old(root),.dark::view-transition-old(root)": {
            "animation": "scale 1.5s",
            "animation-fill-mode": "both",
            "z-index": "-1",
            "transform-origin": "top left"
          },
          "@keyframes scale": {
            "to": {
              "mask-size": "200vmax"
            }
          }
        }
      },
      "docs": "https://abdisamadjoe.com/components/theme-toggle-effect",
      "categories": [
        "effects"
      ],
      "type": "registry:style",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>",
      "files": []
    },
    {
      "name": "thin-scrollbar",
      "css": {
        "@layer base": {
          "::-webkit-scrollbar": {
            "width": "5px"
          },
          "::-webkit-scrollbar-track": {
            "background": "transparent"
          },
          "::-webkit-scrollbar-thumb": {
            "background": "var(--border)",
            "border-radius": "5px"
          },
          "*": {
            "scrollbar-width": "thin",
            "scrollbar-color": "var(--border) transparent"
          }
        }
      },
      "type": "registry:style",
      "author": "abdisamadjoe <hello@abdisamadjoe.com>",
      "files": []
    }
  ]
}