hirael
blockmindloopsource: ok · hit
Mindloop
Dark, monochrome newsletter landing page: a full-screen video hero with an inline subscribe form, an answer-engine section, scroll-revealed mission copy, a four-up feature grid and a streaming-video call to action. Framer Motion throughout, with a self-contained pure-black palette and liquid-glass accents.
npx shadcn add "https://hirael.com/r/mindloop.json"free
Where it goes
herofeature-grid
Visual style
glass-blurterminal-monodark-futuristic
Interaction
scroll-revealtext-animation
Tags auto-generated by rules on 9/24/2026 — empty means no evidence, not lack of support.
Dependencies
Bundle weight · mediumanimationmotion
Registry dependencies
buttonfield
Files11 · source cached 10/8/2026, 6:00:48 PM
registry/hirael/bases/radix/templates/mindloop/mindloop.tsx
// Mindloop from Hirael <https://hirael.com/templates/mindloop>
// MIT · Mohammad Shehadeh · https://github.com/MohammadShehadeh/hirael
'use client';
import { cn } from '@/lib/utils';
import { Cta } from './cta';
import { Footer } from './footer';
import { inter, instrumentSerif } from './fonts';
import { Hero } from './hero';
import { Mission } from './mission';
import { Navbar } from './navbar';
import { Search } from './search';
import { Solution } from './solution';
import { MindloopStyles } from './styles';
const Mindloop = () => {
return (
<div
className={cn(
'mindloop',
inter.variable,
instrumentSerif.variable,
'relative min-h-svh bg-background text-foreground antialiased',
'[font-family:var(--font-mindloop-sans),ui-sans-serif,sans-serif]',
)}
>
<MindloopStyles />
<Navbar />
<Hero />
<Search />
<Mission />
<Solution />
<Cta />
<Footer />
</div>
);
};
export default Mindloop;
registry/hirael/bases/radix/templates/mindloop/navbar.tsx
// Mindloop from Hirael <https://hirael.com/templates/mindloop>
// MIT · Mohammad Shehadeh · https://github.com/MohammadShehadeh/hirael
'use client';
import { InstagramIcon, LinkedinIcon, Logo, TwitterIcon } from './primitives';
const NAV_LINKS = [
{ label: 'Home', href: '#home' },
{ label: 'How It Works', href: '#how-it-works' },
{ label: 'Philosophy', href: '#philosophy' },
{ label: 'Use Cases', href: '#use-cases' },
];
const SOCIAL_LINKS = [
{ label: 'Instagram', Icon: InstagramIcon },
{ label: 'LinkedIn', Icon: LinkedinIcon },
{ label: 'Twitter', Icon: TwitterIcon },
];
export const Navbar = () => {
return (
<header className="fixed inset-x-0 top-0 z-50 px-8 py-4 md:px-28">
<nav className="flex items-center justify-between gap-6">
<div className="flex items-center gap-3">
<a href="#home" className="flex items-center gap-2">
<Logo />
<span className="text-lg font-bold tracking-tight">Mindloop</span>
</a>
<div className="hidden items-center gap-6 ps-6 lg:flex">
{NAV_LINKS.map((link) => (
<a
key={link.label}
href={link.href}
className="text-sm text-muted-foreground transition-colors hover:text-foreground"
>
{link.label}
</a>
))}
</div>
</div>
<div className="flex items-center gap-2">
{SOCIAL_LINKS.map(({ label, Icon }) => (
<a
key={label}
href="#"
aria-label={label}
className="liquid-glass inline-flex size-10 items-center justify-center rounded-full text-muted-foreground transition-colors hover:text-foreground"
>
<Icon className="size-4" />
</a>
))}
</div>
</nav>
</header>
);
};
registry/hirael/bases/radix/templates/mindloop/hero.tsx
// Mindloop from Hirael <https://hirael.com/templates/mindloop>
// MIT · Mohammad Shehadeh · https://github.com/MohammadShehadeh/hirael
'use client';
import { motion } from 'motion/react';
import { Button } from '@/registry/hirael/bases/radix/ui/button';
import { Field, FieldLabel } from '@/registry/hirael/bases/radix/ui/field';
import { AvatarRow, Serif, useFadeUp } from './primitives';
const HERO_VIDEO = 'https://hirael.com/media/templates/mindloop/hero.mp4';
export const Hero = () => {
const fade = useFadeUp();
return (
<section id="home" className="relative flex h-dvh w-full flex-col items-center justify-center overflow-hidden">
<video
className="absolute inset-0 h-full w-full object-cover"
src={HERO_VIDEO}
autoPlay
loop
muted
playsInline
aria-hidden
/>
<div aria-hidden className="absolute inset-x-0 bottom-0 h-64 bg-gradient-to-t from-background to-transparent" />
<div className="relative z-10 mx-auto flex w-full max-w-3xl flex-col items-center px-6 pt-28 text-center md:pt-32">
<motion.div {...fade(0)} className="flex flex-col items-center gap-3 sm:flex-row">
<AvatarRow />
<span className="text-sm text-muted-foreground">7,000+ people already subscribed</span>
</motion.div>
<motion.h1
{...fade(0.1, { fade: false })}
className="mt-6 w-full text-5xl font-medium tracking-[-2px] md:text-7xl lg:text-8xl"
>
Get <Serif>Inspired</Serif> with Us
</motion.h1>
<motion.p
{...fade(0.2, { fade: false })}
className="mt-6 w-full max-w-xl text-lg"
style={{ color: 'hsl(var(--hero-subtitle))' }}
>
Join our feed for meaningful updates, news around technology and a shared journey toward depth and direction.
</motion.p>
<motion.form
{...fade(0.3)}
onSubmit={(e) => e.preventDefault()}
className="liquid-glass mt-10 w-full max-w-lg rounded-full p-2"
>
<Field orientation="horizontal" className="gap-2">
<FieldLabel htmlFor="mindloop-hero-email" className="sr-only">
Email address
</FieldLabel>
<input
id="mindloop-hero-email"
type="email"
required
autoComplete="email"
placeholder="Enter your email"
className="min-w-0 flex-1 bg-transparent px-5 text-sm text-foreground outline-none placeholder:text-muted-foreground"
/>
<Button asChild size="lg">
<motion.button type="submit" whileHover={{ scale: 1.03 }} whileTap={{ scale: 0.98 }}>
SUBSCRIBE
</motion.button>
</Button>
</Field>
</motion.form>
</div>
</section>
);
};
registry/hirael/bases/radix/templates/mindloop/search.tsx
// Mindloop from Hirael <https://hirael.com/templates/mindloop>
// MIT · Mohammad Shehadeh · https://github.com/MohammadShehadeh/hirael
'use client';
import { motion } from 'motion/react';
import { ChatGptIcon, GoogleAiIcon, PerplexityIcon, Serif, useFadeUp } from './primitives';
const PLATFORMS = [
{
name: 'ChatGPT',
Icon: ChatGptIcon,
description:
"Millions ask it before they ask anyone else. If your answer isn't in the model, you're not in the conversation.",
},
{
name: 'Perplexity',
Icon: PerplexityIcon,
description: 'It cites its sources out loud. Be one of them, or watch a competitor get the citation instead.',
},
{
name: 'Google AI',
Icon: GoogleAiIcon,
description: 'The answer now sits above the links. The page that earns the summary earns the reader.',
},
];
export const Search = () => {
const fade = useFadeUp();
return (
<section id="use-cases" className="px-8 pt-52 pb-6 md:px-28 md:pt-64 md:pb-9">
<div className="mx-auto max-w-5xl text-center">
<motion.h2 {...fade(0)} className="text-5xl tracking-[-2px] md:text-7xl lg:text-8xl">
Search has <Serif>changed.</Serif> Have you?
</motion.h2>
<motion.p {...fade(0.1)} className="mx-auto mt-8 mb-24 max-w-2xl text-lg text-muted-foreground">
People used to type keywords and scroll. Now they ask a question and read one answer. Make sure it sounds like
you.
</motion.p>
<div className="mb-20 grid gap-12 md:grid-cols-3 md:gap-8">
{PLATFORMS.map((platform, i) => (
<motion.div key={platform.name} {...fade(0.1 * i)} className="flex flex-col items-center">
<div className="liquid-glass flex aspect-square w-full max-w-[200px] items-center justify-center rounded-[2rem]">
<platform.Icon className="h-24 w-24 text-foreground" />
</div>
<h3 className="mt-8 text-base font-semibold">{platform.name}</h3>
<p className="mt-2 max-w-xs text-sm text-muted-foreground">{platform.description}</p>
</motion.div>
))}
</div>
<motion.p {...fade(0)} className="text-center text-sm text-muted-foreground">
If you don't answer the questions, someone else will.
</motion.p>
</div>
</section>
);
};
registry/hirael/bases/radix/templates/mindloop/mission.tsx
// Mindloop from Hirael <https://hirael.com/templates/mindloop>
// MIT · Mohammad Shehadeh · https://github.com/MohammadShehadeh/hirael
'use client';
import * as React from 'react';
import { motion, useReducedMotion, useScroll, useTransform, type MotionValue } from 'motion/react';
import { cn } from '@/lib/utils';
const MISSION_VIDEO = 'https://hirael.com/media/templates/mindloop/mission.mp4';
const PARAGRAPH_1 =
"We're building a space where curiosity meets clarity, where readers find depth, writers find reach, and every newsletter becomes a conversation worth having.";
const PARAGRAPH_1_HIGHLIGHTS = ['curiosity', 'meets', 'clarity'];
const PARAGRAPH_2 =
'A platform where content, community, and insight flow together, with less noise, less friction, and more meaning for everyone involved.';
interface Token {
text: string;
highlight: boolean;
}
const tokenize = (text: string, highlights: string[]): Token[] => {
return text.split(' ').map((word) => ({
text: word,
highlight: highlights.includes(word.replace(/[^a-zA-Z]/g, '')),
}));
};
interface WordProps {
token: Token;
index: number;
total: number;
progress: MotionValue<number>;
reduce: boolean;
}
const Word = ({ token, index, total, progress, reduce }: WordProps) => {
const start = index / total;
const end = (index + 0.9) / total;
const opacity = useTransform(progress, [start, end], [0.15, 1]);
return (
<motion.span className={cn(token.highlight && 'text-foreground')} style={reduce ? undefined : { opacity }}>
{token.text}{' '}
</motion.span>
);
};
export const Mission = () => {
const ref = React.useRef<HTMLDivElement>(null);
const reduce = useReducedMotion() ?? false;
const { scrollYProgress } = useScroll({
target: ref,
offset: ['start 0.85', 'end 0.4'],
});
const tokens1 = tokenize(PARAGRAPH_1, PARAGRAPH_1_HIGHLIGHTS);
const tokens2 = tokenize(PARAGRAPH_2, []);
const total = tokens1.length + tokens2.length;
return (
<section id="philosophy" className="px-8 pt-0 pb-32 md:px-28 md:pb-44">
<div className="mx-auto flex max-w-4xl flex-col items-center">
<video
className="w-full max-w-[800px] rounded-2xl object-cover"
src={MISSION_VIDEO}
autoPlay
loop
muted
playsInline
aria-hidden
/>
<div ref={ref} className="mt-16 w-full text-center md:mt-20">
<p className="text-2xl font-medium tracking-[-1px] text-[hsl(var(--hero-subtitle))] md:text-4xl lg:text-5xl">
{tokens1.map((token, i) => (
<Word key={i} token={token} index={i} total={total} progress={scrollYProgress} reduce={reduce} />
))}
</p>
<p className="mt-10 text-xl font-medium text-[hsl(var(--hero-subtitle))] md:text-2xl lg:text-3xl">
{tokens2.map((token, i) => (
<Word
key={i}
token={token}
index={tokens1.length + i}
total={total}
progress={scrollYProgress}
reduce={reduce}
/>
))}
</p>
</div>
</div>
</section>
);
};
registry/hirael/bases/radix/templates/mindloop/solution.tsx
// Mindloop from Hirael <https://hirael.com/templates/mindloop>
// MIT · Mohammad Shehadeh · https://github.com/MohammadShehadeh/hirael
'use client';
import { motion } from 'motion/react';
import { Serif, useFadeUp } from './primitives';
const SOLUTION_VIDEO = 'https://hirael.com/media/templates/mindloop/solution.mp4';
const FEATURES = [
{
title: 'Curated Feed',
description: 'A reading feed tuned to what you care about, not what shouts loudest.',
},
{
title: 'Writer Tools',
description: 'Draft, schedule and publish in one place, with the formatting out of your way.',
},
{
title: 'Community',
description: 'Comments, replies and shared threads that turn readers into regulars.',
},
{
title: 'Distribution',
description: 'Reach inboxes, the web and answer engines from a single publish.',
},
];
export const Solution = () => {
const fade = useFadeUp();
return (
<section id="how-it-works" className="border-t border-border/30 px-8 py-32 md:px-28 md:py-44">
<div className="mx-auto max-w-6xl">
<motion.p {...fade(0)} className="text-xs tracking-[3px] text-muted-foreground uppercase">
SOLUTION
</motion.p>
<motion.h2 {...fade(0.1)} className="mt-6 max-w-3xl text-4xl tracking-[-1px] md:text-6xl">
The platform for <Serif>meaningful</Serif> content
</motion.h2>
<motion.div {...fade(0.2)} className="mt-12">
<video
className="aspect-[3/1] w-full rounded-2xl object-cover"
src={SOLUTION_VIDEO}
autoPlay
loop
muted
playsInline
aria-hidden
/>
</motion.div>
<div className="mt-16 grid gap-8 md:grid-cols-4">
{FEATURES.map((feature, i) => (
<motion.div key={feature.title} {...fade(0.1 * i)}>
<h3 className="text-base font-semibold">{feature.title}</h3>
<p className="mt-2 text-sm text-muted-foreground">{feature.description}</p>
</motion.div>
))}
</div>
</div>
</section>
);
};
registry/hirael/bases/radix/templates/mindloop/cta.tsx
// Mindloop from Hirael <https://hirael.com/templates/mindloop>
// MIT · Mohammad Shehadeh · https://github.com/MohammadShehadeh/hirael
'use client';
import { motion } from 'motion/react';
import { Logo, Serif, useFadeUp } from './primitives';
const CTA_VIDEO = 'https://hirael.com/media/templates/mindloop/cta.mp4';
export const Cta = () => {
const fade = useFadeUp();
return (
<section className="relative overflow-hidden border-t border-border/30 px-8 py-32 md:px-28 md:py-44">
<video
src={CTA_VIDEO}
autoPlay
loop
muted
playsInline
aria-hidden
className="absolute inset-0 z-0 h-full w-full object-cover"
/>
<div aria-hidden className="absolute inset-0 z-[1] bg-background/45" />
<motion.div {...fade(0)} className="relative z-10 mx-auto flex max-w-2xl flex-col items-center text-center">
<Logo size="lg" />
<h2 className="mt-8 w-full text-4xl tracking-[-1px] md:text-6xl">
Start Your <Serif>Journey</Serif>
</h2>
<p className="mt-6 w-full max-w-lg text-lg text-muted-foreground">
Read what matters, write what lasts, and find the people who care about the same things you do.
</p>
<div className="mt-10 flex flex-col items-center gap-3 sm:flex-row">
<motion.a
href="#"
whileHover={{ scale: 1.03 }}
whileTap={{ scale: 0.98 }}
className="rounded-lg bg-foreground px-8 py-3.5 text-sm font-semibold text-background"
>
Subscribe Now
</motion.a>
<motion.a
href="#"
whileHover={{ scale: 1.03 }}
whileTap={{ scale: 0.98 }}
className="liquid-glass rounded-lg px-8 py-3.5 text-sm font-semibold text-foreground"
>
Start Writing
</motion.a>
</div>
</motion.div>
</section>
);
};
registry/hirael/bases/radix/templates/mindloop/footer.tsx
// Mindloop from Hirael <https://hirael.com/templates/mindloop>
// MIT · Mohammad Shehadeh · https://github.com/MohammadShehadeh/hirael
const FOOTER_LINKS = ['Privacy', 'Terms', 'Contact'];
export const Footer = () => {
return (
<footer className="border-t border-border/30 px-8 py-12 md:px-28">
<div className="flex flex-col items-center justify-between gap-4 sm:flex-row">
<p className="text-sm text-muted-foreground">© 2026 Mindloop. All rights reserved.</p>
<nav className="flex items-center gap-6">
{FOOTER_LINKS.map((link) => (
<a key={link} href="#" className="text-sm text-muted-foreground transition-colors hover:text-foreground">
{link}
</a>
))}
</nav>
</div>
</footer>
);
};
registry/hirael/bases/radix/templates/mindloop/primitives.tsx
// Mindloop from Hirael <https://hirael.com/templates/mindloop>
// MIT · Mohammad Shehadeh · https://github.com/MohammadShehadeh/hirael
'use client';
import * as React from 'react';
import { useReducedMotion, type MotionProps, type Transition } from 'motion/react';
import { cn } from '@/lib/utils';
const FADE_EASE: Transition['ease'] = 'easeOut';
export const useFadeUp = () => {
const reduce = useReducedMotion();
// `fade: false` keeps a headline at full opacity so it counts as painted for Largest Contentful Paint.
return (delay = 0, { fade = true } = {}): MotionProps => ({
initial: reduce ? { opacity: 1, y: 0 } : { opacity: fade ? 0 : 1, y: 20 },
whileInView: { opacity: 1, y: 0 },
viewport: { once: true, margin: '-100px' },
transition: reduce ? { duration: 0 } : { duration: 0.6, delay, ease: FADE_EASE },
});
};
interface SerifProps {
children: React.ReactNode;
className?: string;
}
export const Serif = ({ children, className }: SerifProps) => {
return (
<span className={cn('[font-family:var(--font-mindloop-serif)] font-normal italic', className)}>{children}</span>
);
};
type LogoSize = 'sm' | 'lg';
interface LogoProps {
size?: LogoSize;
}
export const Logo = ({ size = 'sm' }: LogoProps) => {
return (
<span
aria-hidden
className={cn(
'relative inline-flex shrink-0 items-center justify-center rounded-full border-2 border-foreground/60',
size === 'lg' ? 'size-10' : 'size-7',
)}
>
<span className={cn('rounded-full border border-foreground/60', size === 'lg' ? 'size-5' : 'size-3')} />
</span>
);
};
interface IconProps {
className?: string;
}
export const InstagramIcon = ({ className }: IconProps) => {
return (
<svg
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth={1.6}
strokeLinecap="round"
strokeLinejoin="round"
className={className}
aria-hidden
>
<rect x="3" y="3" width="18" height="18" rx="5" />
<circle cx="12" cy="12" r="4" />
<circle cx="17" cy="7" r="1" fill="currentColor" stroke="none" />
</svg>
);
};
export const LinkedinIcon = ({ className }: IconProps) => {
return (
<svg viewBox="0 0 24 24" fill="currentColor" className={className} aria-hidden>
<path d="M6.94 5a1.94 1.94 0 1 1-3.88 0 1.94 1.94 0 0 1 3.88 0ZM3.25 8.5h3.4V21h-3.4V8.5Zm5.6 0h3.26v1.71h.05c.45-.86 1.56-1.77 3.21-1.77 3.43 0 4.07 2.26 4.07 5.2V21h-3.4v-5.45c0-1.3-.02-2.97-1.81-2.97-1.81 0-2.09 1.42-2.09 2.88V21h-3.39V8.5Z" />
</svg>
);
};
export const TwitterIcon = ({ className }: IconProps) => {
return (
<svg viewBox="0 0 24 24" fill="currentColor" className={className} aria-hidden>
<path d="M22 5.92c-.74.33-1.53.55-2.36.65a4.12 4.12 0 0 0 1.8-2.27c-.79.47-1.67.81-2.6 1a4.1 4.1 0 0 0-7 3.74 11.65 11.65 0 0 1-8.46-4.29 4.1 4.1 0 0 0 1.27 5.48c-.65-.02-1.27-.2-1.81-.5v.05a4.1 4.1 0 0 0 3.29 4.02c-.6.16-1.23.18-1.84.07a4.11 4.11 0 0 0 3.83 2.85A8.23 8.23 0 0 1 2 18.4a11.62 11.62 0 0 0 6.29 1.84c7.55 0 11.68-6.25 11.68-11.67l-.01-.53A8.3 8.3 0 0 0 22 5.92Z" />
</svg>
);
};
export const ChatGptIcon = ({ className }: IconProps) => {
return (
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={1.1} className={className} aria-hidden>
<ellipse cx="12" cy="12" rx="4.4" ry="9.4" />
<ellipse cx="12" cy="12" rx="4.4" ry="9.4" transform="rotate(60 12 12)" />
<ellipse cx="12" cy="12" rx="4.4" ry="9.4" transform="rotate(120 12 12)" />
</svg>
);
};
export const PerplexityIcon = ({ className }: IconProps) => {
return (
<svg
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth={1.1}
strokeLinejoin="round"
className={className}
aria-hidden
>
<rect x="5" y="5" width="14" height="14" rx="2.5" />
<rect x="5" y="5" width="14" height="14" rx="2.5" transform="rotate(45 12 12)" />
<path d="M12 3.5v17" />
</svg>
);
};
export const GoogleAiIcon = ({ className }: IconProps) => {
return (
<svg viewBox="0 0 24 24" fill="currentColor" className={className} aria-hidden>
<path d="M12 2c.4 5.3 2.7 7.6 8 8-5.3.4-7.6 2.7-8 8-.4-5.3-2.7-7.6-8-8 5.3-.4 7.6-2.7 8-8Z" />
</svg>
);
};
const AVATAR_TONES = [
{ from: '#dcdcdc', to: '#8f8f8f' },
{ from: '#bfbfbf', to: '#6f6f6f' },
{ from: '#a6a6a6', to: '#545454' },
];
interface AvatarProps {
tone?: number;
className?: string;
}
export const Avatar = ({ tone = 0, className }: AvatarProps) => {
const t = AVATAR_TONES[tone % AVATAR_TONES.length];
const id = `mindloop-avatar-${tone}`;
return (
<span className={cn('inline-flex size-8 overflow-hidden rounded-full border-2 border-background', className)}>
<svg viewBox="0 0 32 32" className="h-full w-full" aria-hidden>
<defs>
<linearGradient id={id} x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stopColor={t.from} />
<stop offset="100%" stopColor={t.to} />
</linearGradient>
</defs>
<rect width="32" height="32" fill={`url(#${id})`} />
<circle cx="16" cy="13" r="5" fill="#0a0a0a" opacity="0.28" />
<path d="M6 30c0-5.5 4.5-9 10-9s10 3.5 10 9Z" fill="#0a0a0a" opacity="0.28" />
</svg>
</span>
);
};
interface AvatarRowProps {
className?: string;
}
export const AvatarRow = ({ className }: AvatarRowProps) => {
return (
<div className={cn('flex -space-x-2', className)}>
<Avatar tone={0} />
<Avatar tone={1} />
<Avatar tone={2} />
</div>
);
};
registry/hirael/bases/radix/templates/mindloop/styles.tsx
// Mindloop from Hirael <https://hirael.com/templates/mindloop>
// MIT · Mohammad Shehadeh · https://github.com/MohammadShehadeh/hirael
const MINDLOOP_CSS = `
.mindloop {
--background: hsl(0 0% 0%);
--foreground: hsl(0 0% 100%);
--card: hsl(0 0% 5%);
--card-foreground: hsl(0 0% 100%);
--primary: hsl(0 0% 100%);
--primary-foreground: hsl(0 0% 0%);
--secondary: hsl(0 0% 12%);
--secondary-foreground: hsl(0 0% 85%);
--muted: hsl(0 0% 15%);
--muted-foreground: hsl(0 0% 65%);
--accent: hsl(170 15% 45%);
--accent-foreground: hsl(0 0% 100%);
--border: hsl(0 0% 20%);
--input: hsl(0 0% 18%);
--ring: hsl(0 0% 40%);
--hero-subtitle: 210 17% 95%;
}
.mindloop .liquid-glass {
background: rgba(255, 255, 255, 0.01);
background-blend-mode: luminosity;
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
border: none;
box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.1);
position: relative;
overflow: hidden;
}
.mindloop .liquid-glass::before {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
padding: 1.4px;
background: linear-gradient(
180deg,
rgba(255, 255, 255, 0.45) 0%,
rgba(255, 255, 255, 0.15) 20%,
rgba(255, 255, 255, 0) 40%,
rgba(255, 255, 255, 0) 60%,
rgba(255, 255, 255, 0.15) 80%,
rgba(255, 255, 255, 0.45) 100%
);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
}
`;
export const MindloopStyles = () => {
return <style dangerouslySetInnerHTML={{ __html: MINDLOOP_CSS }} />;
};
registry/hirael/bases/radix/templates/mindloop/fonts.ts
// Mindloop from Hirael <https://hirael.com/templates/mindloop>
// MIT · Mohammad Shehadeh · https://github.com/MohammadShehadeh/hirael
import { Inter, Instrument_Serif } from 'next/font/google';
export const inter = Inter({
variable: '--font-mindloop-sans',
subsets: ['latin'],
weight: ['400', '500', '600', '700'],
display: 'swap',
});
export const instrumentSerif = Instrument_Serif({
variable: '--font-mindloop-serif',
subsets: ['latin'],
weight: '400',
style: ['normal', 'italic'],
display: 'swap',
});