feat: certificates, landing pages, ai tutor, website update, compliance

This commit is contained in:
Rotimi Best
2026-05-18 03:47:22 +01:00
parent c31ad63955
commit ac3a2c14a7
644 changed files with 56050 additions and 5439 deletions
+48 -17
View File
@@ -1,23 +1,54 @@
<script lang="ts">
import { DotField } from '../../custom/animation/dot-field';
import { cn, type WithElementRef } from '../../tools';
import type { HTMLAttributes } from 'svelte/elements';
let {
ref = $bindable(null),
class: className,
children,
...restProps
}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
type Props = WithElementRef<HTMLAttributes<HTMLDivElement>> & {
/** Renders the marketing-style dot-field canvas behind content (pointer-events none). */
animatedBackground?: boolean;
};
let { ref = $bindable(null), class: className, children, animatedBackground = false, ...restProps }: Props = $props();
const innerClass =
'ui:relative ui:z-10 ui:flex ui:min-w-0 ui:flex-1 ui:flex-col ui:items-center ui:justify-center ui:gap-6 ui:text-balance ui:p-6 ui:text-center ui:md:p-12';
</script>
<div
bind:this={ref}
data-slot="empty"
class={cn(
'ui:flex ui:min-w-0 ui:flex-1 ui:flex-col ui:items-center ui:justify-center ui:gap-6 ui:text-balance ui:rounded-lg ui:border-dashed ui:p-6 ui:text-center ui:md:p-12',
className
)}
{...restProps}
>
{@render children?.()}
</div>
{#if animatedBackground}
<div
bind:this={ref}
data-slot="empty"
class={cn(
'ui:relative ui:overflow-hidden ui:flex ui:min-w-0 ui:flex-1 ui:flex-col ui:rounded-lg ui:border ui:border-dashed ui:border-border ui:text-balance',
className
)}
{...restProps}
>
<DotField
dotRadius={1.5}
dotSpacing={14}
cursorRadius={420}
bulgeOnly={true}
bulgeStrength={56}
glowRadius={140}
sparkle={false}
waveAmplitude={0}
class="ui:pointer-events-none ui:absolute ui:inset-0 ui:z-0 ui:h-full ui:w-full"
/>
<div class={innerClass}>
{@render children?.()}
</div>
</div>
{:else}
<div
bind:this={ref}
data-slot="empty"
class={cn(
'ui:flex ui:min-w-0 ui:flex-1 ui:flex-col ui:items-center ui:justify-center ui:gap-6 ui:text-balance ui:rounded-lg ui:border-dashed ui:p-6 ui:text-center ui:md:p-12',
className
)}
{...restProps}
>
{@render children?.()}
</div>
{/if}
@@ -13,7 +13,7 @@
'ui:group/field-label ui:peer/field-label ui:flex ui:w-fit ui:gap-2 ui:leading-snug ui:group-data-[disabled=true]/field:opacity-50',
'ui:has-[>[data-slot=field]]:w-full ui:has-[>[data-slot=field]]:flex-col ui:has-[>[data-slot=field]]:rounded-md ui:has-[>[data-slot=field]]:border ui:*:data-[slot=field]:p-4',
'ui:has-data-[state=checked]:bg-primary/5 ui:has-data-[state=checked]:border-primary ui:dark:has-data-[state=checked]:bg-primary/10',
'ui:hover:bg-primary/5 ui:cursor-pointer ui:transition-colors ui:transition-duration-200',
'ui:has-[>[data-slot=field]]:hover:bg-primary/5 ui:has-[>[data-slot=field]]:cursor-pointer ui:[&[for]]:cursor-pointer ui:transition-colors ui:transition-duration-200',
className
)}
{...restProps}
@@ -29,7 +29,7 @@
<span class={badgeClass} aria-hidden="true">
{#if locked}
<LockIcon class="ui:size-3.5" />
<LockIcon class="ui:size-3.5 custom" />
{:else}
{number}
{/if}
+1 -1
View File
@@ -18,7 +18,7 @@
data-slot="page-header"
class={cn(
'ui:flex ui:my-4 ui:py-2 ui:flex-col',
isSticky && 'ui:sticky ui:top-14 ui:z-10 ui:bg-background',
isSticky && 'ui:sticky ui:top-11 ui:z-10 ui:bg-background',
className
)}
{...restProps}