# Capitalio dashboard

A shadcn/ui block from the [@watermelon](https://ui.watermelon.sh/?utm_source=shadcn.exchange) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/watermelon/capitalio-dashboard).

- Page, with a live preview: https://shadcn.exchange/r/watermelon/capitalio-dashboard
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/watermelon/capitalio-dashboard-light-4f47819f34d56341.png
- Registry item: https://registry.watermelon.sh/r/capitalio-dashboard.json
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://shadcn.exchange/r/watermelon/capitalio-dashboard.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- npm packages: `@base-ui/react`, `recharts`
- Registry items: `avatar`, `button`, `dropdown-menu`, `sidebar`, `utils`

## Files

### `src/components/dashboards/capitalio-dashboard/components/capitalio/analytics-page.tsx`

```tsx
import {
  Area,
  AreaChart,
  Bar,
  BarChart,
  CartesianGrid,
  ResponsiveContainer,
  Tooltip as RechartsTooltip,
  XAxis,
  YAxis,
} from 'recharts'
import { analyticsDataByPeriod, type PeriodValue } from '../../data'
import { Button } from '@/components/ui/button'
import {
  ChartMarker,
  DashboardCard,
  DashboardChartTooltip,
  DetailHeader,
  DetailTag,
  useDashboardPeriod,
} from './shared'

type AnalyticsByPeriod = typeof analyticsDataByPeriod
type AnalyticsData = AnalyticsByPeriod[PeriodValue]
type AnalyticsPerformance = AnalyticsData['performance']
type AnalyticsMetric = AnalyticsData['metrics'][number]
type AnalyticsSeries = AnalyticsData['returns']['series'][number]
type ChartDataRow = {
  label: string
  [key: string]: number | string
}

function axisLabelsFrom(data: readonly { label: string; axisLabel?: string }[]) {
  return data
    .filter((point) => point.axisLabel)
    .map((point) => point.axisLabel)
}

function seriesNames(series: readonly { dataKey: string; label: string }[]) {
  return Object.fromEntries(series.map((item) => [item.dataKey, item.label]))
}

function seriesColors(series: readonly { dataKey: string; color: string }[]) {
  return Object.fromEntries(series.map((item) => [item.dataKey, item.color]))
}

function hoverFill(color: string) {
  return `color-mix(in oklab, ${color} 78%, var(--foreground))`
}

function valuesFor(data: readonly ChartDataRow[], series: readonly { dataKey: string }[]) {
  return data.flatMap((row) => series.map((item) => Number(row[item.dataKey]) || 0))
}

function roundedDomain(values: readonly number[]) {
  const min = Math.min(...values)
  const max = Math.max(...values)
  const lower = Math.min(0, Math.floor(min / 2) * 2)
  const upper = Math.max(2, Math.ceil(max / 2) * 2)

  return [lower, upper] as const
}

function AnalyticsLegend({ series }: { series: readonly { label: string; color: string }[] }) {
  return (
    <div className="flex min-w-0 flex-wrap items-center justify-center gap-5">
      {series.map((item) => (
        <div key={item.label} className="flex min-w-0 items-center gap-2 text-xs text-muted-foreground">
          <ChartMarker color={item.color} className="size-2.5" />
          <span className="truncate">{item.label}</span>
        </div>
      ))}
    </div>
  )
}

function AnalyticsPerformanceChart({ performance }: { performance: AnalyticsPerformance }) {
  const chartData = performance.data.map((point) => ({
    label: point.label,
    portfolio: point.portfolio,
    benchmark: point.benchmark,
    balanced: point.balanced,
  }))
  const axisLabels = axisLabelsFrom(performance.data)

  return (
    <DashboardCard className="flex flex-col gap-5">
      <DetailHeader title={performance.title} subtitle={performance.subtitle}>
        <DetailTag color="var(--chart-4)">{performance.trend}</DetailTag>
        <Button type="button" variant="secondary" size="sm">
          {performance.compareLabel}
        </Button>
      </DetailHeader>

      <div className="dashboard-dot-grid h-80 min-w-0 overflow-hidden rounded-md md:h-96">
        <ResponsiveContainer width="100%" height="100%">
          <AreaChart data={chartData} margin={{ top: 8, right: 8, bottom: 0, left: 0 }}>
            <defs>
              <linearGradient id="analytics-performance-fill" x1="0" x2="0" y1="0" y2="1">
                <stop offset="0%" stopColor="var(--chart-4)" stopOpacity="0.42" />
                <stop offset="100%" stopColor="var(--chart-4)" stopOpacity="0" />
              </linearGradient>
            </defs>
            <XAxis
              allowDuplicatedCategory
              axisLine={false}
              dataKey="label"
              tick={false}
              tickLine={false}
            />
            <YAxis
              axisLine={false}
              domain={[200, 700]}
              ticks={[200, 300, 400, 500, 600, 700]}
              tick={{ fill: 'var(--muted-foreground)', fontSize: '0.75rem' }}
              tickFormatter={(value) => `${value}K`}
              tickLine={false}
              width={48}
            />
            <RechartsTooltip
              cursor={false}
              content={
                <DashboardChartTooltip
                  colors={seriesColors(performance.legend)}
                  names={seriesNames(performance.legend)}
                  valueFormatter={(value) => `${value}K`}
                />
              }
            />
            <Area
              dataKey="portfolio"
              dot={false}
              fill="url(#analytics-performance-fill)"
              isAnimationActive
              stroke="var(--chart-4)"
              strokeWidth={3}
              type="monotone"
            />
            <Area
              dataKey="benchmark"
              dot={false}
              fill="transparent"
              isAnimationActive
              stroke="var(--chart-1)"
              strokeDasharray="8 8"
              strokeWidth={2}
              type="monotone"
            />
            <Area
              dataKey="balanced"
              dot={false}
              fill="transparent"
              isAnimationActive
              stroke="var(--chart-2)"
              strokeDasharray="4 6"
              strokeWidth={2}
              type="monotone"
            />
          </AreaChart>
        </ResponsiveContainer>
      </div>

      <div className="grid min-w-0 grid-cols-4 pl-12 text-center text-xs text-muted-foreground">
        {axisLabels.map((label) => (
          <span key={label} className="truncate">{label}</span>
        ))}
      </div>

      <AnalyticsLegend series={performance.legend} />
    </DashboardCard>
  )
}

function AnalyticsMetricChart({ metric }: { metric: AnalyticsMetric }) {
  if (metric.type === 'bars') {
    const chartData = metric.data.map((point) => ({
      label: point.label,
      value: point.value,
    }))

    return (
      <ResponsiveContainer width="100%" height="100%">
        <BarChart data={chartData} margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>
          <XAxis dataKey="label" hide />
          <YAxis hide domain={[0, 28]} />
          <RechartsTooltip
            cursor={false}
            content={
              <DashboardChartTooltip
                colors={{ value: metric.color }}
                names={{ value: metric.title }}
                valueFormatter={(value) => `${value}%`}
              />
            }
          />
          <Bar
            activeBar={{ fill: hoverFill(metric.color) }}
            dataKey="value"
            fill={metric.color}
            isAnimationActive
            radius={[6, 6, 0, 0]}
          />
        </BarChart>
      </ResponsiveContainer>
    )
  }

  const chartData = metric.data.map((point) => ({
    label: point.label,
    x: point.x,
    value: 44 - point.y,
  }))
  const xDomain = [chartData[0]?.x ?? 0, chartData[chartData.length - 1]?.x ?? 0]

  return (
    <ResponsiveContainer width="100%" height="100%">
      <AreaChart data={chartData} margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>
        <defs>
          <linearGradient id={`analytics-${metric.id}-fill`} x1="0" x2="0" y1="0" y2="1">
            <stop offset="0%" stopColor={metric.color} stopOpacity="0.42" />
            <stop offset="100%" stopColor={metric.color} stopOpacity="0" />
          </linearGradient>
        </defs>
        <XAxis dataKey="x" type="number" hide domain={xDomain} />
        <YAxis hide domain={[0, 44]} />
        <RechartsTooltip
          cursor={false}
          content={
            <DashboardChartTooltip
              colors={{ value: metric.color }}
              names={{ value: metric.title }}
            />
          }
        />
        <Area
          dataKey="value"
          dot={false}
          fill={`url(#analytics-${metric.id}-fill)`}
          isAnimationActive
          stroke={metric.color}
          strokeWidth={2}
          type="monotone"
        />
      </AreaChart>
    </ResponsiveContainer>
  )
}

function AnalyticsMetricCard({ metric }: { metric: AnalyticsMetric }) {
  return (
    <DashboardCard className="flex min-h-40 flex-col gap-5">
      <div>
        <h2 className="truncate text-base font-medium leading-6">{metric.title}</h2>
        <div className="mt-4 text-3xl font-semibold leading-none">{metric.value}</div>
        <div className="mt-1 truncate text-xs text-muted-foreground">{metric.description}</div>
      </div>
      <div className="min-h-16 flex-1">
        <AnalyticsMetricChart metric={metric} />
      </div>
    </DashboardCard>
  )
}

function ReturnsChart({
  data,
  series,
}: {
  data: AnalyticsData['returns']['data']
  series: readonly AnalyticsSeries[]
}) {
  const chartData = data.map((row) => ({ ...row }))
  const [yMin, yMax] = roundedDomain(valuesFor(chartData, series))

  return (
    <ResponsiveContainer width="100%" height="100%">
      <BarChart data={chartData} margin={{ top: 8, right: 0, bottom: 0, left: 0 }}>
        <CartesianGrid
          stroke="var(--border)"
          strokeDasharray="3 3"
          vertical={false}
        />
        <XAxis
          axisLine={false}
          dataKey="label"
          tick={{ fill: 'var(--muted-foreground)', fontSize: '0.75rem' }}
          tickLine={false}
        />
        <YAxis
          axisLine={false}
          domain={[yMin, yMax]}
          tick={{ fill: 'var(--muted-foreground)', fontSize: '0.75rem' }}
          tickFormatter={(value) => `${value}%`}
          tickLine={false}
          width={40}
        />
        <RechartsTooltip
          cursor={false}
          content={
            <DashboardChartTooltip
              colors={seriesColors(series)}
              names={seriesNames(series)}
              valueFormatter={(value) => `${value}%`}
            />
          }
        />
        {series.map((item) => (
          <Bar
            activeBar={{ fill: hoverFill(item.color) }}
            key={item.dataKey}
            dataKey={item.dataKey}
            fill={item.color}
            isAnimationActive
            radius={[4, 4, 0, 0]}
          />
        ))}
      </BarChart>
    </ResponsiveContainer>
  )
}

function IncomeChart({ income }: { income: AnalyticsData['income'] }) {
  const chartData = income.data.map((row) => ({ ...row }))
  const stacks = chartData.map((row) =>
    income.series.reduce((total, item) => total + (Number(row[item.dataKey]) || 0), 0),
  )
  const yMax = Math.max(5, Math.ceil(Math.max(...stacks)))

  return (
    <ResponsiveContainer width="100%" height="100%">
      <BarChart data={chartData} margin={{ top: 8, right: 0, bottom: 0, left: 0 }}>
        <CartesianGrid
          stroke="var(--border)"
          strokeDasharray="3 3"
          vertical={false}
        />
        <XAxis
          axisLine={false}
          dataKey="label"
          tick={{ fill: 'var(--muted-foreground)', fontSize: '0.75rem' }}
          tickLine={false}
        />
        <YAxis
          axisLine={false}
          domain={[0, yMax]}
          tick={{ fill: 'var(--muted-foreground)', fontSize: '0.75rem' }}
          tickFormatter={(value) => `${value}.0K`}
          tickLine={false}
          width={48}
        />
        <RechartsTooltip
          cursor={false}
          content={
            <DashboardChartTooltip
              colors={seriesColors(income.series)}
              names={seriesNames(income.series)}
              valueFormatter={(value) => `$${value}K`}
            />
          }
        />
        {income.series.map((item, index) => (
          <Bar
            activeBar={{ fill: hoverFill(item.color) }}
            key={item.dataKey}
            dataKey={item.dataKey}
            fill={item.color}
            isAnimationActive
            radius={index === income.series.length - 1 ? [6, 6, 0, 0] : [0, 0, 6, 6]}
            stackId="income"
          />
        ))}
      </BarChart>
    </ResponsiveContainer>
  )
}

function AnalyticsPanel({
  title,
  subtitle,
  status,
  series,
  children,
}: {
  title: string
  subtitle: string
  status: string
  series: readonly { label: string; color: string }[]
  children: React.ReactNode
}) {
  return (
    <DashboardCard className="flex min-h-80 flex-col gap-5">
      <DetailHeader title={title} subtitle={subtitle}>
        <DetailTag color="var(--chart-4)">{status}</DetailTag>
      </DetailHeader>
      <AnalyticsLegend series={series} />
      <div className="min-h-56 flex-1">{children}</div>
    </DashboardCard>
  )
}

export function AnalyticsPage() {
  const period = useDashboardPeriod()
  const analytics = analyticsDataByPeriod[period]

  return (
    <section className="flex min-h-full flex-col gap-4 p-4 pb-8 md:p-8">
      <AnalyticsPerformanceChart performance={analytics.performance} />

      <div className="grid min-w-0 gap-3 lg:grid-cols-3">
        {analytics.metrics.map((metric) => (
          <AnalyticsMetricCard key={metric.id} metric={metric} />
        ))}
      </div>

      <div className="grid min-w-0 gap-3 xl:grid-cols-2">
        <AnalyticsPanel
          title={analytics.returns.title}
          subtitle={analytics.returns.subtitle}
          status={analytics.returns.status}
          series={analytics.returns.series}
        >
          <ReturnsChart data={analytics.returns.data} series={analytics.returns.series} />
        </AnalyticsPanel>

        <AnalyticsPanel
          title={analytics.income.title}
          subtitle={analytics.income.subtitle}
          status={analytics.income.status}
          series={analytics.income.series}
        >
          <IncomeChart income={analytics.income} />
        </AnalyticsPanel>
      </div>
    </section>
  )
}
```

### `src/components/dashboards/capitalio-dashboard/components/capitalio/dashboard-page.tsx`

```tsx
import {
  Area,
  AreaChart as RechartsAreaChart,
  Bar,
  BarChart,
  Pie,
  PieChart,
  ResponsiveContainer,
  Tooltip as RechartsTooltip,
  XAxis,
  YAxis,
} from 'recharts'
import {
  dashboardBottomByPeriod,
  dashboardDetailByPeriod,
  dashboardSummaryCardsByPeriod,
  type PeriodValue,
} from '../../data'
import {
  DashboardAnalyticsUpIcon,
  Dashboard3dScaleIcon,
  DashboardArrowUpIcon,
  DashboardArrowUpRightIcon,
  DashboardMoneyBagIcon,
  DashboardPieChartIcon,
  DashboardReloadHorizontalIcon,
  DashboardShieldIcon,
  DashboardTaxesIcon,
} from './icons'
import { Button } from '@/components/ui/button'
import {
  ChartMarker,
  DashboardCard,
  DashboardChartTooltip,
  DetailHeader,
  DetailTag,
  toneColor,
  useDashboardPeriod,
} from './shared'
import { cn } from '@/lib/utils'

const cardIcons = {
  wallet: DashboardMoneyBagIcon,
  trend: DashboardAnalyticsUpIcon,
  pie: DashboardPieChartIcon,
  shield: DashboardShieldIcon,
} as const

const insightIcons = {
  scale: Dashboard3dScaleIcon,
  taxes: DashboardTaxesIcon,
  reload: DashboardReloadHorizontalIcon,
} as const

type SummaryCardsByPeriod = typeof dashboardSummaryCardsByPeriod
type SummaryCard = SummaryCardsByPeriod[PeriodValue][number]
type DetailByPeriod = typeof dashboardDetailByPeriod
type DashboardDetail = DetailByPeriod[PeriodValue]
type BottomByPeriod = typeof dashboardBottomByPeriod
type DashboardBottom = BottomByPeriod[PeriodValue]
type HoldingRow = DashboardBottom['holdings']['rows'][number]
type InsightItem = DashboardBottom['insights']['items'][number]
type ChartPoint = {
  label: string
  x: number
  y: number
}
type ReturnBarShapeProps = {
  x?: number
  y?: number
  width?: number
  height?: number
  payload?: {
    isActive?: boolean
  }
}
function createChartData(points: readonly ChartPoint[], baseline: number) {
  return points.map((point) => ({
    name: point.label,
    x: point.x,
    value: baseline - point.y,
  }))
}

function getEveryOtherLabels(points: readonly { label: string }[]) {
  return points
    .filter((_, index) => index % 2 === 0)
    .map((point) => point.label)
}

function IconBadge({ card }: { card: SummaryCard }) {
  const Icon = cardIcons[card.icon]

  return (
    <div className="dashboard-icon-badge flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-lg p-2 text-white shadow-none">
      <Icon className="size-5 shrink-0" />
    </div>
  )
}

function AxisLabels({ labels }: { labels: readonly string[] }) {
  return (
    <div className="grid grid-cols-3 text-xs leading-none text-muted-foreground">
      {labels.map((label, index) => (
        <span
          key={label}
          className={cn(index === 1 && 'text-center', index === 2 && 'text-right')}
        >
          {label}
        </span>
      ))}
    </div>
  )
}

function LineChart({ card }: { card: Extract<SummaryCard, { id: 'net-worth' }> }) {
  const chartData = createChartData(card.chart.points, 58)
  const axisLabels = getEveryOtherLabels(card.chart.points)
  const xDomain = [chartData[0]?.x ?? 0, chartData[chartData.length - 1]?.x ?? 0]

  return (
    <div className="space-y-2">
      <div
        role="img"
        aria-label={`${card.title} trend`}
        className="h-16 w-full"
        style={{ color: card.color }}
      >
        <ResponsiveContainer width="100%" height="100%">
          <RechartsAreaChart data={chartData} margin={{ top: 2, right: 0, bottom: 0, left: 0 }}>
            <defs>
              <linearGradient id={`${card.id}-fill`} x1="0" x2="0" y1="0" y2="1">
                <stop offset="0%" stopColor="currentColor" stopOpacity="0.32" />
                <stop offset="100%" stopColor="currentColor" stopOpacity="0" />
              </linearGradient>
            </defs>
            <XAxis dataKey="x" type="number" hide domain={xDomain} />
            <YAxis hide domain={[0, 58]} />
            <RechartsTooltip
              cursor={false}
              content={
                <DashboardChartTooltip
                  colors={{ value: card.color }}
                  names={{ value: card.title }}
                />
              }
            />
            <Area
              dataKey="value"
              dot={false}
              fill={`url(#${card.id}-fill)`}
              isAnimationActive
              stroke="currentColor"
              strokeWidth={2}
              type="monotone"
            />
          </RechartsAreaChart>
        </ResponsiveContainer>
      </div>
      <AxisLabels labels={axisLabels} />
    </div>
  )
}

function AreaChart({ card }: { card: Extract<SummaryCard, { id: 'risk-score' }> }) {
  const chartData = createChartData(card.chart.points, 48)
  const axisLabels = getEveryOtherLabels(card.chart.points)
  const xDomain = [chartData[0]?.x ?? 0, chartData[chartData.length - 1]?.x ?? 0]

  return (
    <div className="space-y-2">
      <div
        role="img"
        aria-label={`${card.title} history`}
        className="h-12 w-full"
        style={{ color: card.color }}
      >
        <ResponsiveContainer width="100%" height="100%">
          <RechartsAreaChart data={chartData} margin={{ top: 2, right: 0, bottom: 0, left: 0 }}>
            <defs>
              <linearGradient id={`${card.id}-risk-fill`} x1="0" x2="0" y1="0" y2="1">
                <stop offset="0%" stopColor="currentColor" stopOpacity="0.36" />
                <stop offset="100%" stopColor="currentColor" stopOpacity="0" />
              </linearGradient>
            </defs>
            <XAxis dataKey="x" type="number" hide domain={xDomain} />
            <YAxis hide domain={[0, 48]} />
            <RechartsTooltip
              cursor={false}
              content={
                <DashboardChartTooltip
                  colors={{ value: card.color }}
                  names={{ value: card.title }}
                />
              }
            />
            <Area
              dataKey="value"
              dot={false}
              fill={`url(#${card.id}-risk-fill)`}
              isAnimationActive
              stroke="currentColor"
              strokeWidth={2}
              type="monotone"
            />
          </RechartsAreaChart>
        </ResponsiveContainer>
      </div>
      <AxisLabels labels={axisLabels} />
    </div>
  )
}

function ReturnChart({ card }: { card: Extract<SummaryCard, { id: 'portfolio-return' }> }) {
  const chartData = card.bars.map((bar, index) => ({
    name: bar.label,
    value: bar.value,
    isActive: index === card.bars.length - 1,
  }))
  const axisLabels = card.bars
    .filter((_, index) => index % 2 === 0)
    .map((bar) => bar.label)

  return (
    <div className="space-y-3">
      <div className="space-y-2">
        <div
          className="h-2 overflow-hidden rounded-sm"
          style={{
            backgroundColor: 'color-mix(in oklab, var(--foreground) 7%, transparent)',
          }}
        >
          <div
            key={card.target.progress}
            className="dashboard-progress-fill h-full rounded-sm bg-primary"
            style={{ width: `${card.target.progress}%` }}
          />
        </div>
        <div className="flex items-center justify-between text-xs leading-none">
          <span className="font-medium text-foreground">{card.target.gained}</span>
          <span className="text-muted-foreground">{card.target.goal}</span>
        </div>
      </div>

      <div className="space-y-2">
        <div role="img" aria-label={`${card.title} bars`} className="h-8 w-full">
          <ResponsiveContainer width="100%" height="100%">
            <BarChart data={chartData} margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>
              <XAxis dataKey="name" hide />
              <YAxis hide domain={[0, 32]} />
              <RechartsTooltip
                cursor={false}
                content={
                  <DashboardChartTooltip
                    colors={{ value: 'var(--chart-1)' }}
                    names={{ value: card.title }}
                  />
                }
              />
              <Bar
                activeBar={(props: ReturnBarShapeProps) => (
                  <rect
                    x={props.x}
                    y={props.y}
                    width={props.width}
                    height={props.height}
                    rx="0.25rem"
                    fill={
                      props.payload?.isActive
                        ? 'var(--chart-1)'
                        : 'color-mix(in oklab, var(--chart-1) 65%, transparent)'
                    }
                  />
                )}
                dataKey="value"
                fill="var(--chart-1)"
                isAnimationActive
                shape={(props: ReturnBarShapeProps) => (
                  <rect
                    x={props.x}
                    y={props.y}
                    width={props.width}
                    height={props.height}
                    rx="0.25rem"
                    fill={
                      props.payload?.isActive
                        ? 'var(--chart-1)'
                        : 'color-mix(in oklab, var(--chart-1) 35%, transparent)'
                    }
                  />
                )}
              />
            </BarChart>
          </ResponsiveContainer>
        </div>
        <AxisLabels labels={axisLabels} />
      </div>
    </div>
  )
}

function AllocationChart({ card }: { card: Extract<SummaryCard, { id: 'asset-classes' }> }) {
  const chartData = [
    Object.fromEntries(card.allocations.map((allocation) => [allocation.label, allocation.share])),
  ]
  const patternIds = card.allocations.map((allocation, index) => (
    `${card.id}-${index}-${allocation.label.toLowerCase().replaceAll(/[^a-z0-9]+/g, '-')}-pattern`
  ))

  return (
    <div className="flex flex-1 flex-col justify-between gap-6">
      <div role="img" aria-label={`${card.title} allocation`} className="h-5 w-full">
        <ResponsiveContainer width="100%" height="100%">
          <BarChart
            data={chartData}
            layout="vertical"
            margin={{ top: 0, right: 0, bottom: 0, left: 0 }}
          >
            <XAxis type="number" hide domain={[0, 100]} />
            <YAxis type="category" hide />
            <defs>
              {card.allocations.map((allocation, index) => (
                <pattern
                  key={allocation.label}
                  id={patternIds[index]}
                  width="24"
                  height="24"
                  patternTransform="rotate(45)"
                  patternUnits="userSpaceOnUse"
                >
                  <rect width="24" height="24" fill={allocation.color} />
                  <rect
                    width="10"
                    height="24"
                    fill={`color-mix(in oklab, ${allocation.color} 89%, black)`}
                  />
                </pattern>
              ))}
            </defs>
            {card.allocations.map((allocation, index) => (
              <Bar
                key={allocation.label}
                dataKey={allocation.label}
                fill={`url(#${patternIds[index]})`}
                isAnimationActive
                radius={
                  index === 0
                    ? [6, 0, 0, 6]
                    : [0, 6, 6, 0]
                }
                stackId="allocation"
              />
            ))}
          </BarChart>
        </ResponsiveContainer>
      </div>

      <div className="space-y-4">
        {card.allocations.map((allocation) => (
          <div key={allocation.label} className="flex items-center gap-3">
            <ChartMarker color={allocation.color} className="size-3.5" />
            <span className="min-w-0 flex-1 truncate text-sm text-foreground/80">
              {allocation.label}
            </span>
            <span className="text-sm font-semibold text-foreground">
              {allocation.value}
            </span>
          </div>
        ))}
      </div>
    </div>
  )
}

function SummaryVisualization({ card }: { card: SummaryCard }) {
  if (card.id === 'asset-classes') {
    return <AllocationChart card={card} />
  }

  if (card.id === 'portfolio-return') {
    return <ReturnChart card={card} />
  }

  if (card.id === 'risk-score') {
    return <AreaChart card={card} />
  }

  return <LineChart card={card} />
}

function SummaryCard({ card }: { card: SummaryCard }) {
  return (
    <DashboardCard className="flex min-h-48 flex-col gap-6">
      <div className="flex items-center justify-between gap-3">
        <h2 className="truncate text-base font-normal leading-6">{card.title}</h2>
        <IconBadge card={card} />
      </div>

      <div className="flex items-end gap-2">
        <div className="text-3xl font-bold leading-none tracking-normal">
          {card.value}
          {'suffix' in card ? (
            <span className="ml-1 text-base font-semibold text-foreground/70">
              {card.suffix}
            </span>
          ) : null}
        </div>

        {'change' in card ? (
          <div className="flex min-w-0 items-center gap-1 pb-0.5 text-xs leading-tight text-muted-foreground">
            {card.change.tone === 'positive' ? (
              <DashboardArrowUpIcon className="h-2.5 w-1.5 shrink-0" />
            ) : null}
            <span
              className={cn(
                'shrink-0 font-medium',
                card.change.tone !== 'positive' && 'text-foreground',
              )}
              style={card.change.tone === 'positive' ? { color: 'var(--chart-4)' } : undefined}
            >
              {card.change.value}
            </span>
            <span className="truncate">{card.change.label}</span>
          </div>
        ) : null}

        {'target' in card ? (
          <div className="min-w-0 pb-0.5 text-xs leading-tight text-muted-foreground">
            <span className="font-medium text-foreground">{card.target.current}</span>{' '}
            <span>{card.target.label}</span>
          </div>
        ) : null}
      </div>

      <SummaryVisualization card={card} />
    </DashboardCard>
  )
}

function PerformanceChart({ performance }: { performance: DashboardDetail['performance'] }) {
  const chartData = performance.data.map((point) => ({
    name: point.label,
    portfolio: point.portfolio,
    benchmark: point.benchmark,
  }))
  const axisLabels = performance.data
    .filter((point) => 'axisLabel' in point)
    .map((point) => point.axisLabel)

  return (
    <div className="flex min-h-80 min-w-0 flex-col gap-3">
      <div className="dashboard-dot-grid min-h-72 min-w-0 flex-1 overflow-hidden rounded-md">
        <ResponsiveContainer width="100%" height="100%">
          <RechartsAreaChart data={chartData} margin={{ top: 8, right: 8, bottom: 0, left: 0 }}>
            <defs>
              <linearGradient id="portfolio-performance-fill" x1="0" x2="0" y1="0" y2="1">
                <stop offset="0%" stopColor="var(--chart-4)" stopOpacity="0.42" />
                <stop offset="100%" stopColor="var(--chart-4)" stopOpacity="0" />
              </linearGradient>
            </defs>
            <XAxis
              axisLine={false}
              dataKey="name"
              tick={false}
              tickLine={false}
            />
            <YAxis
              axisLine={false}
              dataKey="portfolio"
              domain={[200, 700]}
              ticks={[200, 300, 400, 500, 600, 700]}
              tick={{ fill: 'var(--muted-foreground)', fontSize: '0.75rem' }}
              tickFormatter={(value) => `${value}K`}
              tickLine={false}
              width={48}
            />
            <RechartsTooltip
              cursor={false}
              content={
                <DashboardChartTooltip
                  colors={{
                    portfolio: 'var(--chart-4)',
                    benchmark: 'var(--chart-1)',
                  }}
                  names={{
                    portfolio: 'Your Portfolio',
                    benchmark: 'S&P 500',
                  }}
                  valueFormatter={(value) => `${value}K`}
                />
              }
            />
            <Area
              dataKey="portfolio"
              dot={false}
              fill="url(#portfolio-performance-fill)"
              isAnimationActive
              stroke="var(--chart-4)"
              strokeWidth={3}
              type="monotone"
            />
            <Area
              dataKey="benchmark"
              dot={false}
              fill="transparent"
              isAnimationActive
              stroke="var(--chart-1)"
              strokeDasharray="8 8"
              strokeWidth={2}
              type="monotone"
            />
          </RechartsAreaChart>
        </ResponsiveContainer>
      </div>

      <div className="grid min-w-0 grid-cols-4 pl-12 text-center text-xs text-muted-foreground">
        {axisLabels.map((label) => (
          <span key={label} className="truncate">{label}</span>
        ))}
      </div>
    </div>
  )
}

function PerformancePanel({ performance }: { performance: DashboardDetail['performance'] }) {
  return (
    <DashboardCard className="flex flex-col gap-6 xl:col-span-2">
      <DetailHeader title={performance.title}>
        <DetailTag color="var(--chart-4)">{performance.trend}</DetailTag>
        <Button
          type="button"
          variant="secondary"
          size="sm"
        >
          <span className="truncate">{performance.actionLabel}</span>
          <DashboardArrowUpRightIcon className="size-4 shrink-0" />
        </Button>
      </DetailHeader>

      <PerformanceChart performance={performance} />

      <div className="flex flex-wrap items-center justify-end gap-4">
        {performance.legend.map((item) => (
          <div key={item.label} className="flex items-center gap-2 text-sm text-foreground/80">
            <ChartMarker color={item.color} />
            <span>{item.label}</span>
          </div>
        ))}
      </div>

      <div className="grid grid-cols-2 gap-5 xl:grid-cols-4">
        {performance.metrics.map((metric) => (
          <div key={metric.label} className="space-y-2">
            <div className="text-sm font-medium text-muted-foreground">{metric.label}</div>
            <div className="text-2xl font-medium leading-none">{metric.value}</div>
            <div
              className="flex items-center gap-1 text-xs font-medium"
              style={{
                color: metric.tone === 'positive' ? 'var(--chart-4)' : 'var(--destructive)',
              }}
            >
              <DashboardArrowUpIcon className={cn('h-3 w-2', metric.tone === 'negative' && 'rotate-180')} />
              <span>{metric.change}</span>
            </div>
          </div>
        ))}
      </div>
    </DashboardCard>
  )
}

function AllocationDonut({ allocation }: { allocation: DashboardDetail['allocation'] }) {
  const chartData = allocation.items.map((item) => ({
    name: item.label,
    value: item.percent,
    fill: item.color,
  }))

  return (
    <div className="relative mx-auto aspect-square w-full max-w-56">
      <ResponsiveContainer width="100%" height="100%">
        <PieChart>
          <Pie
            cornerRadius={4}
            data={chartData}
            dataKey="value"
            endAngle={-270}
            innerRadius="68%"
            isAnimationActive
            outerRadius="88%"
            paddingAngle={6}
            startAngle={90}
            stroke="none"
          />
          <RechartsTooltip
            wrapperStyle={{ zIndex: 20 }}
            cursor={false}
            content={
              <DashboardChartTooltip
                valueFormatter={(value) => `${value}%`}
              />
            }
          />
        </PieChart>
      </ResponsiveContainer>
      <div className="pointer-events-none absolute inset-0 z-0 flex flex-col items-center justify-center">
        <div className="text-3xl font-semibold leading-none">{allocation.centerValue}</div>
        <div className="mt-2 text-base text-muted-foreground">{allocation.centerLabel}</div>
      </div>
    </div>
  )
}

function AllocationPanel({ allocation }: { allocation: DashboardDetail['allocation'] }) {
  return (
    <DashboardCard className="flex flex-col gap-6">
      <DetailHeader title={allocation.title}>
        <DetailTag>{allocation.status}</DetailTag>
      </DetailHeader>

      <div className="flex flex-1 flex-col justify-between gap-6">
        <AllocationDonut allocation={allocation} />

        <div className="space-y-5">
          {allocation.items.map((item) => (
            <div key={item.label} className="flex items-center justify-between gap-4">
              <div className="flex min-w-0 items-center gap-3">
                <ChartMarker color={item.color} className="size-4" />
                <span className="truncate text-base font-medium text-foreground/80">{item.label}</span>
              </div>
              <div className="flex shrink-0 items-center gap-4">
                <span className="text-base font-medium text-foreground/80">{item.value}</span>
                <span className="min-w-10 text-right text-base text-muted-foreground">{item.percent}%</span>
              </div>
            </div>
          ))}
        </div>
      </div>
    </DashboardCard>
  )
}

function DashboardDetailSection({ detail }: { detail: DashboardDetail }) {
  return (
    <div className="grid min-w-0 gap-3 xl:grid-cols-3">
      <PerformancePanel performance={detail.performance} />
      <AllocationPanel allocation={detail.allocation} />
    </div>
  )
}

function HoldingAsset({ row }: { row: HoldingRow }) {
  return (
    <div className="flex min-w-0 items-center gap-3">
      <span className="flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg">
        <img src={row.logo} alt="" className="size-full object-cover" />
      </span>
      <div className="min-w-0">
        <div className="truncate text-sm font-medium leading-none">{row.asset}</div>
        <div className="mt-1 text-xs leading-none text-muted-foreground">{row.type}</div>
      </div>
    </div>
  )
}

function HoldingsTable({ holdings }: { holdings: DashboardBottom['holdings'] }) {
  return (
    <DashboardCard className="flex flex-col gap-4 lg:col-span-2">
      <DetailHeader title={holdings.title}>
        <Button
          type="button"
          variant="secondary"
          size="sm"
        >
          <span className="truncate">{holdings.actionLabel}</span>
          <DashboardArrowUpRightIcon className="size-4 shrink-0" />
        </Button>
      </DetailHeader>

      <div className="hidden min-w-0 md:block">
        <div className="grid grid-cols-12 items-center rounded-lg border border-border bg-foreground/5 px-4 py-3 text-sm font-medium text-foreground/80">
          <div className="col-span-1">{holdings.columns[0]}</div>
          <div className="col-span-4">{holdings.columns[1]}</div>
          <div className="col-span-2">{holdings.columns[2]}</div>
          <div className="col-span-2">{holdings.columns[3]}</div>
          <div className="col-span-2">{holdings.columns[4]}</div>
          <div className="col-span-1">{holdings.columns[5]}</div>
        </div>

        <div>
          {holdings.rows.map((row) => (
            <div
              key={row.no}
              className="grid grid-cols-12 items-center border-b border-border px-4 py-3 last:border-b-0"
            >
              <div className="col-span-1 text-sm text-muted-foreground">{row.no}</div>
              <div className="col-span-4 min-w-0">
                <HoldingAsset row={row} />
              </div>
              <div className="col-span-2 text-sm">{row.value}</div>
              <div className="col-span-2 text-sm">{row.allocation}</div>
              <div className="col-span-2 text-sm" style={{ color: toneColor(row.tone) }}>
                {row.return}
              </div>
              <div className="col-span-1 text-sm" style={{ color: toneColor(row.dayTone) }}>
                {row.day}
              </div>
            </div>
          ))}
        </div>
      </div>

      <div className="grid gap-3 md:hidden">
        {holdings.rows.map((row) => (
          <div key={row.no} className="rounded-lg border border-border p-3">
            <div className="flex items-center justify-between gap-3">
              <HoldingAsset row={row} />
              <span className="text-sm text-muted-foreground">{row.no}</span>
            </div>
            <div className="mt-4 grid grid-cols-2 gap-3 text-sm">
              <div>
                <div className="text-xs text-muted-foreground">Value</div>
                <div>{row.value}</div>
              </div>
              <div>
                <div className="text-xs text-muted-foreground">Allocation</div>
                <div>{row.allocation}</div>
              </div>
              <div>
                <div className="text-xs text-muted-foreground">Return</div>
                <div style={{ color: toneColor(row.tone) }}>{row.return}</div>
              </div>
              <div>
                <div className="text-xs text-muted-foreground">24H</div>
                <div style={{ color: toneColor(row.dayTone) }}>{row.day}</div>
              </div>
            </div>
          </div>
        ))}
      </div>
    </DashboardCard>
  )
}

function InsightIcon({ item }: { item: InsightItem }) {
  const Icon = insightIcons[item.icon]

  return (
    <div className="dashboard-icon-badge flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-lg p-1.5 text-white">
      <Icon className="size-5 text-white" />
    </div>
  )
}

function SmartInsightsPanel({ insights }: { insights: DashboardBottom['insights'] }) {
  return (
    <DashboardCard className="flex flex-col gap-6">
      <DetailHeader title={insights.title}>
        <DetailTag>{insights.status}</DetailTag>
      </DetailHeader>

      <div className="flex flex-col gap-6">
        {insights.items.map((item, index) => (
          <div
            key={item.title}
            className={cn('flex gap-3', index > 0 && 'border-t border-border pt-6')}
          >
            <InsightIcon item={item} />
            <div className="min-w-0 flex-1">
              <div className="font-medium leading-tight">{item.title}</div>
              <div className="mt-2 text-sm leading-snug text-muted-foreground">
                {item.description}
              </div>
              <div className="mt-3 flex justify-end">
                <Button
                  type="button"
                  variant="secondary"
                  size="sm"
                >
                  <span className="truncate">{item.action}</span>
                  <DashboardArrowUpRightIcon className="size-4 shrink-0" />
                </Button>
              </div>
            </div>
          </div>
        ))}
      </div>
    </DashboardCard>
  )
}

function DashboardBottomSection({ bottom }: { bottom: DashboardBottom }) {
  return (
    <div className="grid min-w-0 gap-3 lg:grid-cols-3">
      <HoldingsTable holdings={bottom.holdings} />
      <SmartInsightsPanel insights={bottom.insights} />
    </div>
  )
}

export function DashboardPage() {
  const period = useDashboardPeriod()
  const dashboardSummaryCards = dashboardSummaryCardsByPeriod[period]
  const dashboardDetail = dashboardDetailByPeriod[period]
  const dashboardBottom = dashboardBottomByPeriod[period]

  return (
    <section className="flex min-h-full flex-col gap-4 p-4 pb-8 md:p-8">
      <div className="grid min-w-0 gap-3 md:grid-cols-2 xl:grid-cols-4">
        {dashboardSummaryCards.map((card) => (
          <SummaryCard key={card.id} card={card} />
        ))}
      </div>
      <DashboardDetailSection detail={dashboardDetail} />
      <DashboardBottomSection bottom={dashboardBottom} />
    </section>
  )
}
```

### `src/components/dashboards/capitalio-dashboard/components/capitalio/icons.tsx`

```tsx
import type { SVGProps } from 'react'
import { cn } from '@/lib/utils'

type IconProps = SVGProps<SVGSVGElement>

function Icon({ className, ...props }: IconProps) {
  return (
    <svg
      viewBox="0 0 20 20"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      className={cn('size-5', className)}
      {...props}
    />
  )
}

export function HomeIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M17.1336 8.49063L10.8836 2.24063C10.6492 2.00638 10.3314 1.8748 10 1.8748C9.66862 1.8748 9.3508 2.00638 9.11641 2.24063L2.86641 8.49063C2.74977 8.6064 2.65731 8.7442 2.59441 8.89602C2.53151 9.04785 2.49942 9.21066 2.5 9.375V16.875C2.5 17.0408 2.56585 17.1997 2.68306 17.3169C2.80027 17.4342 2.95924 17.5 3.125 17.5H16.875C17.0408 17.5 17.1997 17.4342 17.3169 17.3169C17.4342 17.1997 17.5 17.0408 17.5 16.875V9.375C17.5006 9.21066 17.4685 9.04785 17.4056 8.89602C17.3427 8.7442 17.2502 8.6064 17.1336 8.49063ZM16.25 16.25H3.75V9.375L10 3.125L16.25 9.375V16.25Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function ClockIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M10 1.875C8.39303 1.875 6.82214 2.35152 5.48599 3.24431C4.14984 4.1371 3.10844 5.40605 2.49348 6.8907C1.87852 8.37535 1.71761 10.009 2.03112 11.5851C2.34462 13.1612 3.11846 14.6089 4.25476 15.7452C5.39106 16.8815 6.8388 17.6554 8.41489 17.9689C9.99099 18.2824 11.6247 18.1215 13.1093 17.5065C14.594 16.8916 15.8629 15.8502 16.7557 14.514C17.6485 13.1779 18.125 11.607 18.125 10C18.1227 7.84581 17.266 5.78051 15.7427 4.25727C14.2195 2.73403 12.1542 1.87727 10 1.875ZM10 16.875C8.64025 16.875 7.31104 16.4718 6.18045 15.7164C5.04987 14.9609 4.16868 13.8872 3.64833 12.6309C3.12798 11.3747 2.99183 9.99237 3.2571 8.65875C3.52237 7.32513 4.17715 6.10013 5.13864 5.13864C6.10013 4.17715 7.32513 3.52237 8.65875 3.2571C9.99237 2.99183 11.3747 3.12798 12.6309 3.64833C13.8872 4.16868 14.9609 5.04987 15.7164 6.18045C16.4718 7.31104 16.875 8.64025 16.875 10C16.8729 11.8227 16.1479 13.5702 14.8591 14.8591C13.5702 16.1479 11.8227 16.8729 10 16.875ZM15 10C15 10.1658 14.9342 10.3247 14.8169 10.4419C14.6997 10.5592 14.5408 10.625 14.375 10.625H10C9.83424 10.625 9.67527 10.5592 9.55806 10.4419C9.44085 10.3247 9.375 10.1658 9.375 10V5.625C9.375 5.45924 9.44085 5.30027 9.55806 5.18306C9.67527 5.06585 9.83424 5 10 5C10.1658 5 10.3247 5.06585 10.4419 5.18306C10.5592 5.30027 10.625 5.45924 10.625 5.625V9.375H14.375C14.5408 9.375 14.6997 9.44085 14.8169 9.55806C14.9342 9.67527 15 9.83424 15 10Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function WarningIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M18.5 14.6945L11.668 2.82969C11.4972 2.539 11.2535 2.29798 10.9609 2.13052C10.6684 1.96305 10.3371 1.87495 10 1.87495C9.66289 1.87495 9.33163 1.96305 9.03906 2.13052C8.74648 2.29798 8.50276 2.539 8.33203 2.82969L1.5 14.6945C1.33573 14.9757 1.24916 15.2955 1.24916 15.6211C1.24916 15.9467 1.33573 16.2665 1.5 16.5477C1.66854 16.8401 1.91185 17.0824 2.20497 17.2498C2.49809 17.4171 2.83046 17.5035 3.16797 17.5H16.832C17.1693 17.5032 17.5013 17.4167 17.7941 17.2494C18.087 17.082 18.33 16.8399 18.4984 16.5477C18.6629 16.2666 18.7498 15.9469 18.7501 15.6213C18.7503 15.2957 18.664 14.9758 18.5 14.6945ZM17.4164 15.9219C17.3568 16.0235 17.2713 16.1074 17.1686 16.1651C17.066 16.2227 16.9498 16.252 16.832 16.25H3.16797C3.05022 16.252 2.93404 16.2227 2.83135 16.1651C2.72866 16.1074 2.64315 16.0235 2.58359 15.9219C2.52964 15.8305 2.50119 15.7264 2.50119 15.6203C2.50119 15.5142 2.52964 15.4101 2.58359 15.3187L9.41562 3.45391C9.47639 3.35279 9.56228 3.26912 9.66496 3.21103C9.76763 3.15295 9.88359 3.12242 10.0016 3.12242C10.1195 3.12242 10.2355 3.15295 10.3382 3.21103C10.4408 3.26912 10.5267 3.35279 10.5875 3.45391L17.4195 15.3187C17.473 15.4104 17.5009 15.5147 17.5004 15.6207C17.4998 15.7268 17.4708 15.8308 17.4164 15.9219ZM9.375 11.25V8.125C9.375 7.95924 9.44085 7.80027 9.55806 7.68306C9.67527 7.56585 9.83424 7.5 10 7.5C10.1658 7.5 10.3247 7.56585 10.4419 7.68306C10.5592 7.80027 10.625 7.95924 10.625 8.125V11.25C10.625 11.4158 10.5592 11.5747 10.4419 11.6919C10.3247 11.8092 10.1658 11.875 10 11.875C9.83424 11.875 9.67527 11.8092 9.55806 11.6919C9.44085 11.5747 9.375 11.4158 9.375 11.25ZM10.9375 14.0625C10.9375 14.2479 10.8825 14.4292 10.7795 14.5833C10.6765 14.7375 10.5301 14.8577 10.3588 14.9286C10.1875 14.9996 9.99896 15.0182 9.8171 14.982C9.63525 14.9458 9.4682 14.8565 9.33709 14.7254C9.20598 14.5943 9.11669 14.4273 9.08051 14.2454C9.04434 14.0635 9.06291 13.875 9.13386 13.7037C9.20482 13.5324 9.32498 13.386 9.47915 13.283C9.63332 13.18 9.81458 13.125 10 13.125C10.2486 13.125 10.4871 13.2238 10.6629 13.3996C10.8387 13.5754 10.9375 13.8139 10.9375 14.0625Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function FileIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M16.6922 6.43281L12.3172 2.05781C12.2591 1.99979 12.1902 1.95378 12.1143 1.92241C12.0384 1.89105 11.9571 1.87494 11.875 1.875H4.375C4.04348 1.875 3.72554 2.0067 3.49112 2.24112C3.2567 2.47554 3.125 2.79348 3.125 3.125V16.875C3.125 17.2065 3.2567 17.5245 3.49112 17.7589C3.72554 17.9933 4.04348 18.125 4.375 18.125H15.625C15.9565 18.125 16.2745 17.9933 16.5089 17.7589C16.7433 17.5245 16.875 17.2065 16.875 16.875V6.875C16.8751 6.7929 16.859 6.71159 16.8276 6.63572C16.7962 6.55985 16.7502 6.4909 16.6922 6.43281ZM12.5 4.00859L14.7414 6.25H12.5V4.00859ZM15.625 16.875H4.375V3.125H11.25V6.875C11.25 7.04076 11.3158 7.19973 11.4331 7.31694C11.5503 7.43415 11.7092 7.5 11.875 7.5H15.625V16.875Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function ShieldCheckIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M16.25 3.125H3.75C3.41848 3.125 3.10054 3.2567 2.86612 3.49112C2.6317 3.72554 2.5 4.04348 2.5 4.375V8.75C2.5 12.8688 4.49375 15.3648 6.16641 16.7336C7.96797 18.207 9.76016 18.707 9.83828 18.7281C9.9457 18.7573 10.059 18.7573 10.1664 18.7281C10.2445 18.707 12.0344 18.207 13.8383 16.7336C15.5063 15.3648 17.5 12.8688 17.5 8.75V4.375C17.5 4.04348 17.3683 3.72554 17.1339 3.49112C16.8995 3.2567 16.5815 3.125 16.25 3.125ZM16.25 8.75C16.25 11.6461 15.1828 13.9969 13.0781 15.7359C12.1619 16.4904 11.12 17.0775 10 17.4703C8.89469 17.0843 7.86558 16.5077 6.95938 15.7664C4.82969 14.0242 3.75 11.6641 3.75 8.75V4.375H16.25V8.75ZM6.43281 11.0672C6.31554 10.9499 6.24965 10.7909 6.24965 10.625C6.24965 10.4591 6.31554 10.3001 6.43281 10.1828C6.55009 10.0655 6.70915 9.99965 6.875 9.99965C7.04085 9.99965 7.19991 10.0655 7.31719 10.1828L8.75 11.6164L12.6828 7.68281C12.7409 7.62474 12.8098 7.57868 12.8857 7.54725C12.9616 7.51583 13.0429 7.49965 13.125 7.49965C13.2071 7.49965 13.2884 7.51583 13.3643 7.54725C13.4402 7.57868 13.5091 7.62474 13.5672 7.68281C13.6253 7.74088 13.6713 7.80982 13.7027 7.88569C13.7342 7.96156 13.7503 8.04288 13.7503 8.125C13.7503 8.20712 13.7342 8.28844 13.7027 8.36431C13.6713 8.44018 13.6253 8.50912 13.5672 8.56719L9.19219 12.9422C9.13414 13.0003 9.06521 13.0464 8.98934 13.0779C8.91346 13.1093 8.83213 13.1255 8.75 13.1255C8.66787 13.1255 8.58654 13.1093 8.51066 13.0779C8.43479 13.0464 8.36586 13.0003 8.30781 12.9422L6.43281 11.0672Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function PlayCircleIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M10 1.875C8.39303 1.875 6.82214 2.35152 5.48599 3.24431C4.14984 4.1371 3.10844 5.40605 2.49348 6.8907C1.87852 8.37535 1.71761 10.009 2.03112 11.5851C2.34462 13.1612 3.11846 14.6089 4.25476 15.7452C5.39106 16.8815 6.8388 17.6554 8.41489 17.9689C9.99099 18.2824 11.6247 18.1215 13.1093 17.5065C14.594 16.8916 15.8629 15.8502 16.7557 14.514C17.6485 13.1779 18.125 11.607 18.125 10C18.1227 7.84581 17.266 5.78051 15.7427 4.25727C14.2195 2.73403 12.1542 1.87727 10 1.875ZM10 16.875C8.64025 16.875 7.31104 16.4718 6.18045 15.7164C5.04987 14.9609 4.16868 13.8872 3.64833 12.6309C3.12798 11.3747 2.99183 9.99237 3.2571 8.65875C3.52237 7.32513 4.17715 6.10013 5.13864 5.13864C6.10013 4.17715 7.32513 3.52237 8.65875 3.2571C9.99237 2.99183 11.3747 3.12798 12.6309 3.64833C13.8872 4.16868 14.9609 5.04987 15.7164 6.18045C16.4718 7.31104 16.875 8.64025 16.875 10C16.8729 11.8227 16.1479 13.5702 14.8591 14.8591C13.5702 16.1479 11.8227 16.8729 10 16.875ZM13.7688 9.47031L8.76875 6.34531C8.67416 6.2862 8.56548 6.25347 8.45398 6.25053C8.34248 6.24759 8.23223 6.27454 8.13466 6.32858C8.03709 6.38263 7.95576 6.4618 7.89911 6.55789C7.84246 6.65397 7.81256 6.76346 7.8125 6.875V13.125C7.81256 13.2365 7.84246 13.346 7.89911 13.4421C7.95576 13.5382 8.03709 13.6174 8.13466 13.6714C8.23223 13.7255 8.34248 13.7524 8.45398 13.7495C8.56548 13.7465 8.67416 13.7138 8.76875 13.6547L13.7688 10.5297C13.8585 10.4735 13.9325 10.3954 13.9838 10.3027C14.0351 10.2101 14.062 10.1059 14.062 10C14.062 9.8941 14.0351 9.78993 13.9838 9.69728C13.9325 9.60462 13.8585 9.52653 13.7688 9.47031ZM9.0625 11.9977V8.00234L12.2586 10L9.0625 11.9977Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function FolderIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M16.875 5.625H10.2586L8.125 3.49141C8.00935 3.37483 7.87168 3.2824 7.71999 3.2195C7.5683 3.1566 7.40562 3.12448 7.24141 3.125H3.125C2.79348 3.125 2.47554 3.2567 2.24112 3.49112C2.0067 3.72554 1.875 4.04348 1.875 4.375V15.6734C1.87541 15.992 2.00214 16.2974 2.22739 16.5226C2.45263 16.7479 2.75802 16.8746 3.07656 16.875H16.9445C17.2575 16.8746 17.5575 16.7501 17.7788 16.5288C18.0001 16.3075 18.1246 16.0075 18.125 15.6945V6.875C18.125 6.54348 17.9933 6.22554 17.7589 5.99112C17.5245 5.7567 17.2065 5.625 16.875 5.625ZM3.125 4.375H7.24141L8.49141 5.625H3.125V4.375ZM16.875 15.625H3.125V6.875H16.875V15.625Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function LinkIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M18.75 6.89297C18.7186 7.98098 18.2713 9.01554 17.5 9.78359L14.7852 12.5C14.3898 12.8976 13.9194 13.2128 13.4014 13.4273C12.8833 13.6419 12.3279 13.7516 11.7672 13.75H11.7633C11.193 13.7496 10.6286 13.6349 10.1034 13.4127C9.57814 13.1905 9.10279 12.8653 8.70536 12.4563C8.30794 12.0473 7.99652 11.5628 7.78949 11.0314C7.58246 10.5 7.48403 9.93256 7.5 9.3625C7.50466 9.19674 7.57498 9.03962 7.69549 8.92571C7.81599 8.81179 7.97682 8.75042 8.14258 8.75508C8.30834 8.75974 8.46546 8.83006 8.57937 8.95057C8.69328 9.07107 8.75466 9.2319 8.75 9.39766C8.73862 9.80072 8.80815 10.202 8.95447 10.5777C9.1008 10.9535 9.32096 11.2961 9.60194 11.5853C9.88292 11.8745 10.219 12.1044 10.5904 12.2616C10.9617 12.4187 11.3608 12.4997 11.7641 12.5C12.1604 12.501 12.5531 12.4234 12.9193 12.2718C13.2855 12.1201 13.6181 11.8974 13.8977 11.6164L16.6125 8.90156C17.1726 8.33438 17.4856 7.56863 17.4831 6.77149C17.4806 5.97435 17.1629 5.21057 16.5992 4.64691C16.0355 4.08324 15.2717 3.76547 14.4746 3.76298C13.6775 3.76049 12.9117 4.07347 12.3445 4.63359L11.4852 5.49297C11.367 5.60523 11.2096 5.66689 11.0467 5.66481C10.8837 5.66272 10.728 5.59705 10.6127 5.4818C10.4975 5.36655 10.4318 5.21083 10.4297 5.04786C10.4276 4.88488 10.4893 4.72754 10.6016 4.60938L11.4609 3.75C11.8574 3.35338 12.3282 3.03876 12.8463 2.82411C13.3643 2.60945 13.9197 2.49897 14.4805 2.49897C15.0413 2.49897 15.5966 2.60945 16.1147 2.82411C16.6328 3.03876 17.1035 3.35338 17.5 3.75C17.9107 4.16169 18.2333 4.65263 18.4482 5.19296C18.6631 5.73329 18.7658 6.31169 18.75 6.89297ZM8.51562 14.5047L7.65625 15.3641C7.37596 15.6462 7.04237 15.8698 6.67488 16.0219C6.30739 16.174 5.91334 16.2516 5.51562 16.25C4.91899 16.2495 4.33588 16.0722 3.83997 15.7405C3.34407 15.4087 2.95762 14.9374 2.72946 14.3861C2.50131 13.8348 2.44167 13.2283 2.5581 12.6431C2.67453 12.0579 2.96179 11.5204 3.38359 11.0984L6.09375 8.38359C6.52061 7.95448 7.06665 7.66363 7.66093 7.54882C8.25521 7.43401 8.87029 7.50055 9.42627 7.73979C9.98226 7.97903 10.4535 8.37992 10.7787 8.8904C11.1039 9.40087 11.2681 9.99734 11.25 10.6023C11.2453 10.7681 11.3067 10.9289 11.4206 11.0494C11.5345 11.1699 11.6917 11.2403 11.8574 11.2449C12.0232 11.2496 12.184 11.1882 12.3045 11.0743C12.425 10.9604 12.4953 10.8033 12.5 10.6375C12.515 10.0571 12.4119 9.47977 12.1971 8.94043C11.9822 8.4011 11.66 7.91105 11.25 7.5C10.4494 6.69971 9.36367 6.25014 8.23164 6.25014C7.09961 6.25014 6.01392 6.69971 5.21328 7.5L2.5 10.2148C1.90331 10.8113 1.49681 11.5712 1.33188 12.3986C1.16696 13.2261 1.251 14.0838 1.5734 14.8634C1.8958 15.6431 2.44207 16.3097 3.1432 16.779C3.84432 17.2482 4.66882 17.4992 5.5125 17.5C6.07334 17.5016 6.62892 17.392 7.14709 17.1774C7.66527 16.9628 8.13573 16.6476 8.53125 16.25L9.39062 15.3906C9.49177 15.2715 9.54461 15.1188 9.53873 14.9626C9.53285 14.8064 9.46867 14.6581 9.35885 14.5469C9.24903 14.4357 9.10154 14.3697 8.94545 14.3619C8.78936 14.3541 8.63601 14.405 8.51562 14.5047Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function UsersIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M19.125 11.75C19.0593 11.7992 18.9846 11.8351 18.9051 11.8554C18.8256 11.8758 18.7429 11.8803 18.6616 11.8687C18.5804 11.8571 18.5022 11.8296 18.4316 11.7878C18.3609 11.746 18.2992 11.6907 18.25 11.625C17.8733 11.1186 17.383 10.7078 16.8185 10.4256C16.254 10.1433 15.6311 9.99755 15 10C14.8771 9.99999 14.7569 9.96374 14.6545 9.89579C14.5521 9.82784 14.472 9.73121 14.4242 9.61797C14.3918 9.54107 14.3751 9.45846 14.3751 9.375C14.3751 9.29154 14.3918 9.20893 14.4242 9.13203C14.472 9.0188 14.5521 8.92216 14.6545 8.85421C14.7569 8.78626 14.8771 8.75001 15 8.75C15.3507 8.74997 15.6943 8.65159 15.9919 8.46605C16.2895 8.2805 16.529 8.01522 16.6834 7.70034C16.8378 7.38547 16.9007 7.03361 16.8652 6.68474C16.8296 6.33586 16.6969 6.00397 16.4821 5.72674C16.2673 5.44951 15.9791 5.23806 15.6502 5.11642C15.3213 4.99477 14.9649 4.96781 14.6214 5.03858C14.278 5.10935 13.9612 5.27503 13.7072 5.51679C13.4532 5.75855 13.272 6.0667 13.1844 6.40625C13.1639 6.48576 13.1279 6.56045 13.0785 6.62606C13.0291 6.69167 12.9673 6.7469 12.8966 6.78862C12.8258 6.83033 12.7476 6.8577 12.6663 6.86917C12.5849 6.88064 12.5022 6.87599 12.4227 6.85547C12.3431 6.83495 12.2685 6.79897 12.2028 6.74959C12.1372 6.7002 12.082 6.63838 12.0403 6.56765C11.9986 6.49691 11.9712 6.41866 11.9597 6.33735C11.9483 6.25604 11.9529 6.17326 11.9734 6.09375C12.0951 5.6229 12.325 5.18695 12.6448 4.82059C12.9647 4.45422 13.3656 4.16756 13.8157 3.9834C14.2658 3.79924 14.7526 3.72267 15.2375 3.75979C15.7224 3.79691 16.192 3.94668 16.6088 4.1972C17.0256 4.44771 17.3782 4.79206 17.6386 5.20283C17.8989 5.6136 18.0598 6.07946 18.1084 6.56334C18.157 7.04722 18.092 7.53577 17.9186 7.99012C17.7451 8.44446 17.468 8.85205 17.1094 9.18047C17.9592 9.54844 18.698 10.1324 19.2523 10.8742C19.3016 10.94 19.3374 11.0149 19.3576 11.0946C19.3779 11.1743 19.3822 11.2572 19.3704 11.3385C19.3585 11.4199 19.3308 11.4981 19.2887 11.5687C19.2466 11.6393 19.1909 11.7009 19.125 11.75ZM14.9156 16.5625C14.9608 16.6336 14.9912 16.7132 15.0049 16.7964C15.0186 16.8795 15.0153 16.9646 14.9952 17.0465C14.9752 17.1284 14.9388 17.2053 14.8882 17.2728C14.8376 17.3402 14.7739 17.3967 14.701 17.4389C14.628 17.4811 14.5472 17.5081 14.4635 17.5182C14.3799 17.5284 14.295 17.5215 14.214 17.498C14.1331 17.4746 14.0577 17.4349 13.9925 17.3816C13.9272 17.3282 13.8734 17.2622 13.8344 17.1875C13.4407 16.5208 12.8799 15.9683 12.2075 15.5845C11.5351 15.2007 10.7742 14.9989 10 14.9989C9.22576 14.9989 8.46489 15.2007 7.79248 15.5845C7.12007 15.9683 6.55934 16.5208 6.16562 17.1875C6.12655 17.2622 6.07278 17.3282 6.00753 17.3816C5.94228 17.4349 5.86692 17.4746 5.78596 17.498C5.70501 17.5215 5.62014 17.5284 5.53646 17.5182C5.45278 17.5081 5.37202 17.4811 5.29904 17.4389C5.22607 17.3967 5.16237 17.3402 5.1118 17.2728C5.06123 17.2053 5.02482 17.1284 5.00477 17.0465C4.98471 16.9646 4.98143 16.8795 4.99511 16.7964C5.00879 16.7132 5.03915 16.6336 5.08437 16.5625C5.69031 15.5214 6.61421 14.7021 7.72031 14.225C7.09791 13.7485 6.64049 13.0889 6.41234 12.3389C6.1842 11.589 6.1968 10.7864 6.44837 10.044C6.69994 9.30158 7.17785 8.65666 7.8149 8.1999C8.45195 7.74314 9.21612 7.4975 10 7.4975C10.7839 7.4975 11.5481 7.74314 12.1851 8.1999C12.8222 8.65666 13.3001 9.30158 13.5516 10.044C13.8032 10.7864 13.8158 11.589 13.5877 12.3389C13.3595 13.0889 12.9021 13.7485 12.2797 14.225C13.3858 14.7021 14.3097 15.5214 14.9156 16.5625ZM10 13.75C10.4945 13.75 10.9778 13.6034 11.3889 13.3287C11.8 13.054 12.1205 12.6635 12.3097 12.2067C12.4989 11.7499 12.5484 11.2472 12.452 10.7623C12.3555 10.2773 12.1174 9.83186 11.7678 9.48223C11.4181 9.1326 10.9727 8.8945 10.4877 8.79804C10.0028 8.70157 9.50011 8.75108 9.04329 8.9403C8.58648 9.12952 8.19603 9.44995 7.92133 9.86107C7.64662 10.2722 7.5 10.7555 7.5 11.25C7.5 11.913 7.76339 12.5489 8.23223 13.0178C8.70107 13.4866 9.33696 13.75 10 13.75ZM5.625 9.375C5.625 9.20924 5.55915 9.05027 5.44194 8.93306C5.32473 8.81585 5.16576 8.75 5 8.75C4.64932 8.74997 4.30567 8.65159 4.0081 8.46605C3.71053 8.2805 3.47095 8.01522 3.31659 7.70034C3.16222 7.38547 3.09926 7.03361 3.13484 6.68474C3.17043 6.33586 3.30314 6.00397 3.5179 5.72674C3.73266 5.44951 4.02086 5.23806 4.34976 5.11642C4.67867 4.99477 5.0351 4.96781 5.37857 5.03858C5.72203 5.10935 6.03877 5.27503 6.29279 5.51679C6.54682 5.75855 6.72795 6.0667 6.81562 6.40625C6.85706 6.56683 6.9606 6.70437 7.10345 6.78862C7.2463 6.87286 7.41676 6.89691 7.57734 6.85547C7.73792 6.81403 7.87546 6.7105 7.95971 6.56765C8.04395 6.4248 8.068 6.25433 8.02656 6.09375C7.90488 5.6229 7.67498 5.18695 7.35516 4.82059C7.03535 4.45422 6.63444 4.16756 6.18434 3.9834C5.73424 3.79924 5.24737 3.72267 4.76247 3.75979C4.27757 3.79691 3.80802 3.94668 3.39119 4.1972C2.97436 4.44771 2.62175 4.79206 2.36142 5.20283C2.10109 5.6136 1.94022 6.07946 1.89162 6.56334C1.84301 7.04722 1.90801 7.53577 2.08144 7.99012C2.25487 8.44446 2.53195 8.85205 2.89062 9.18047C2.04163 9.54878 1.30368 10.1327 0.75 10.8742C0.65044 11.0068 0.607637 11.1736 0.631005 11.3377C0.654374 11.5019 0.742001 11.6501 0.874609 11.7496C1.00722 11.8492 1.17394 11.892 1.33811 11.8686C1.50228 11.8452 1.65044 11.7576 1.75 11.625C2.12671 11.1186 2.61704 10.7078 3.18153 10.4256C3.74602 10.1433 4.36889 9.99755 5 10C5.16576 10 5.32473 9.93415 5.44194 9.81694C5.55915 9.69973 5.625 9.54076 5.625 9.375Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function GearIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M10 6.25C9.25832 6.25 8.5333 6.46993 7.91661 6.88199C7.29993 7.29404 6.81928 7.87971 6.53545 8.56494C6.25162 9.25016 6.17736 10.0042 6.32206 10.7316C6.46675 11.459 6.8239 12.1272 7.34835 12.6517C7.8728 13.1761 8.54098 13.5333 9.26841 13.6779C9.99584 13.8226 10.7498 13.7484 11.4351 13.4645C12.1203 13.1807 12.706 12.7001 13.118 12.0834C13.5301 11.4667 13.75 10.7417 13.75 10C13.749 9.00576 13.3535 8.05253 12.6505 7.34949C11.9475 6.64645 10.9942 6.25103 10 6.25ZM10 12.5C9.50555 12.5 9.0222 12.3534 8.61107 12.0787C8.19995 11.804 7.87952 11.4135 7.6903 10.9567C7.50108 10.4999 7.45157 9.99723 7.54804 9.51227C7.6445 9.02732 7.8826 8.58186 8.23223 8.23223C8.58186 7.8826 9.02732 7.6445 9.51227 7.54804C9.99723 7.45157 10.4999 7.50108 10.9567 7.6903C11.4135 7.87952 11.804 8.19995 12.0787 8.61108C12.3534 9.0222 12.5 9.50555 12.5 10C12.5 10.663 12.2366 11.2989 11.7678 11.7678C11.2989 12.2366 10.663 12.5 10 12.5ZM18.5891 8.37578C18.5717 8.28777 18.5355 8.20454 18.4831 8.13174C18.4306 8.05895 18.3631 7.99829 18.2852 7.95391L15.9547 6.62578L15.9453 3.99922C15.945 3.90876 15.9251 3.81944 15.8869 3.73743C15.8488 3.65542 15.7933 3.58268 15.7242 3.52422C14.8789 2.80914 13.9053 2.26115 12.8555 1.90938C12.7728 1.88139 12.6852 1.87103 12.5982 1.87897C12.5113 1.88691 12.427 1.91297 12.3508 1.95547L10 3.26953L7.64687 1.95313C7.57059 1.91039 7.48618 1.88413 7.39911 1.87606C7.31204 1.86798 7.22425 1.87827 7.14141 1.90625C6.0923 2.26059 5.11992 2.81068 4.27578 3.52734C4.20685 3.58572 4.15139 3.65834 4.11322 3.7402C4.07505 3.82207 4.05508 3.91124 4.05469 4.00156L4.04297 6.63047L1.7125 7.95859C1.63453 8.00298 1.56703 8.06363 1.51459 8.13643C1.46216 8.20923 1.426 8.29246 1.40859 8.38047C1.19531 9.45225 1.19531 10.5556 1.40859 11.6273C1.426 11.7154 1.46216 11.7986 1.51459 11.8714C1.56703 11.9442 1.63453 12.0048 1.7125 12.0492L4.04297 13.3773L4.05234 16.0039C4.05263 16.0944 4.07254 16.1837 4.11071 16.2657C4.14889 16.3477 4.20441 16.4204 4.27344 16.4789C5.11881 17.194 6.09231 17.742 7.14219 18.0938C7.22487 18.1217 7.31249 18.1321 7.39941 18.1242C7.48634 18.1162 7.57063 18.0902 7.64687 18.0477L10 16.7305L12.3531 18.0469C12.4462 18.0988 12.5512 18.1257 12.6578 18.125C12.7261 18.125 12.7939 18.1139 12.8586 18.0922C13.9076 17.7383 14.88 17.1888 15.7242 16.4727C15.7932 16.4143 15.8486 16.3417 15.8868 16.2598C15.9249 16.1779 15.9449 16.0888 15.9453 15.9984L15.957 13.3695L18.2875 12.0414C18.3655 11.997 18.433 11.9364 18.4854 11.8636C18.5378 11.7908 18.574 11.7075 18.5914 11.6195C18.8035 10.5486 18.8027 9.4464 18.5891 8.37578ZM17.4172 11.1031L15.1852 12.3727C15.0874 12.4283 15.0064 12.5092 14.9508 12.607C14.9055 12.6852 14.8578 12.768 14.8094 12.8461C14.7474 12.9446 14.7143 13.0586 14.7141 13.175L14.7023 15.6945C14.1024 16.1657 13.434 16.5424 12.7203 16.8117L10.4687 15.557C10.3753 15.5053 10.2701 15.4784 10.1633 15.4789H10.1484C10.0539 15.4789 9.95859 15.4789 9.86406 15.4789C9.75226 15.4761 9.64171 15.5031 9.54375 15.557L7.29062 16.8148C6.5754 16.5476 5.90517 16.1727 5.30312 15.7031L5.29453 13.1875C5.29415 13.0709 5.26113 12.9567 5.19922 12.8578C5.15078 12.7797 5.10312 12.7016 5.05859 12.6188C5.00338 12.5194 4.92241 12.4369 4.82422 12.3797L2.58984 11.107C2.47422 10.3756 2.47422 9.63062 2.58984 8.89922L4.81797 7.62734C4.91576 7.57174 4.99674 7.49076 5.05234 7.39297C5.09766 7.31484 5.14531 7.23203 5.19375 7.15391C5.25575 7.05539 5.28878 6.94141 5.28906 6.825L5.30078 4.30547C5.90073 3.83433 6.56911 3.45759 7.28281 3.18828L9.53125 4.44297C9.6291 4.49721 9.73972 4.52419 9.85156 4.52109C9.94609 4.52109 10.0414 4.52109 10.1359 4.52109C10.2477 4.52389 10.3583 4.49693 10.4562 4.44297L12.7094 3.18516C13.4246 3.4524 14.0948 3.8273 14.6969 4.29688L14.7055 6.8125C14.7059 6.92914 14.7389 7.04334 14.8008 7.14219C14.8492 7.22031 14.8969 7.29844 14.9414 7.38125C14.9966 7.48056 15.0776 7.56314 15.1758 7.62031L17.4102 8.89297C17.5273 9.62493 17.5286 10.3708 17.4141 11.1031H17.4172Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function QuestionIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M10.9375 14.0625C10.9375 14.2479 10.8825 14.4292 10.7795 14.5833C10.6765 14.7375 10.5301 14.8577 10.3588 14.9286C10.1875 14.9996 9.99896 15.0182 9.8171 14.982C9.63525 14.9458 9.4682 14.8565 9.33709 14.7254C9.20598 14.5943 9.11669 14.4273 9.08051 14.2454C9.04434 14.0635 9.06291 13.875 9.13386 13.7037C9.20482 13.5324 9.32498 13.386 9.47915 13.283C9.63332 13.18 9.81458 13.125 10 13.125C10.2486 13.125 10.4871 13.2238 10.6629 13.3996C10.8387 13.5754 10.9375 13.8139 10.9375 14.0625ZM10 5.625C8.27656 5.625 6.875 6.88672 6.875 8.4375V8.75C6.875 8.91576 6.94085 9.07473 7.05806 9.19194C7.17527 9.30915 7.33424 9.375 7.5 9.375C7.66576 9.375 7.82473 9.30915 7.94194 9.19194C8.05915 9.07473 8.125 8.91576 8.125 8.75V8.4375C8.125 7.57812 8.96641 6.875 10 6.875C11.0336 6.875 11.875 7.57812 11.875 8.4375C11.875 9.29688 11.0336 10 10 10C9.83424 10 9.67527 10.0658 9.55806 10.1831C9.44085 10.3003 9.375 10.4592 9.375 10.625V11.25C9.375 11.4158 9.44085 11.5747 9.55806 11.6919C9.67527 11.8092 9.83424 11.875 10 11.875C10.1658 11.875 10.3247 11.8092 10.4419 11.6919C10.5592 11.5747 10.625 11.4158 10.625 11.25V11.1937C12.05 10.932 13.125 9.79531 13.125 8.4375C13.125 6.88672 11.7234 5.625 10 5.625ZM18.125 10C18.125 11.607 17.6485 13.1779 16.7557 14.514C15.8629 15.8502 14.594 16.8916 13.1093 17.5065C11.6247 18.1215 9.99099 18.2824 8.41489 17.9689C6.8388 17.6554 5.39106 16.8815 4.25476 15.7452C3.11846 14.6089 2.34462 13.1612 2.03112 11.5851C1.71761 10.009 1.87852 8.37535 2.49348 6.8907C3.10844 5.40605 4.14984 4.1371 5.48599 3.24431C6.82214 2.35152 8.39303 1.875 10 1.875C12.1542 1.87727 14.2195 2.73403 15.7427 4.25727C17.266 5.78051 18.1227 7.84581 18.125 10ZM16.875 10C16.875 8.64025 16.4718 7.31104 15.7164 6.18045C14.9609 5.04987 13.8872 4.16868 12.6309 3.64833C11.3747 3.12798 9.99237 2.99183 8.65875 3.2571C7.32513 3.52237 6.10013 4.17715 5.13864 5.13864C4.17715 6.10013 3.52237 7.32513 3.2571 8.65875C2.99183 9.99237 3.12798 11.3747 3.64833 12.6309C4.16868 13.8872 5.04987 14.9609 6.18045 15.7164C7.31104 16.4718 8.64025 16.875 10 16.875C11.8227 16.8729 13.5702 16.1479 14.8591 14.8591C16.1479 13.5702 16.8729 11.8227 16.875 10Z"
        fill="currentColor"
      />
    </Icon>
  )
}

type ToggleIconProps = IconProps & {
  pressed?: boolean
}

export function ToggleIcon({
  className,
  pressed = false,
  ...props
}: ToggleIconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        fillRule="evenodd"
        clipRule="evenodd"
        d="M13.75 4.375H6.25C4.75816 4.375 3.32742 4.96763 2.27252 6.02252C1.21763 7.07742 0.625 8.50816 0.625 10C0.625 11.4918 1.21763 12.9226 2.27252 13.9775C3.32742 15.0324 4.75816 15.625 6.25 15.625H13.75C15.2418 15.625 16.6726 15.0324 17.7275 13.9775C18.7824 12.9226 19.375 11.4918 19.375 10C19.375 8.50816 18.7824 7.07742 17.7275 6.02252C16.6726 4.96763 15.2418 4.375 13.75 4.375ZM13.75 14.375H6.25C5.08968 14.375 3.97688 13.9141 3.15641 13.0936C2.33594 12.2731 1.875 11.1603 1.875 10C1.875 8.83968 2.33594 7.72688 3.15641 6.90641C3.97688 6.08594 5.08968 5.625 6.25 5.625H13.75C14.9103 5.625 16.0231 6.08594 16.8436 6.90641C17.6641 7.72688 18.125 8.83968 18.125 10C18.125 11.1603 17.6641 12.2731 16.8436 13.0936C16.0231 13.9141 14.9103 14.375 13.75 14.375Z"
        fill="currentColor"
      />
      <g
        className={cn(
          'origin-center transition-transform duration-200 ease-linear',
          pressed ? 'translate-x-0' : '-translate-x-2',
        )}
      >
        <path
          d="M13.75 6.875C13.1319 6.875 12.5277 7.05828 12.0138 7.40166C11.4999 7.74504 11.0994 8.2331 10.8629 8.80411C10.6264 9.37513 10.5645 10.0035 10.685 10.6097C10.8056 11.2158 11.1033 11.7727 11.5403 12.2097C11.9773 12.6467 12.5342 12.9444 13.1403 13.065C13.7465 13.1855 14.3749 13.1236 14.9459 12.8871C15.5169 12.6506 16.005 12.2501 16.3483 11.7362C16.6917 11.2223 16.875 10.6181 16.875 10C16.875 9.1712 16.5458 8.37634 15.9597 7.79029C15.3737 7.20424 14.5788 6.875 13.75 6.875ZM13.75 11.875C13.3792 11.875 13.0166 11.765 12.7083 11.559C12.4 11.353 12.1596 11.0601 12.0177 10.7175C11.8758 10.3749 11.8387 9.99792 11.911 9.63421C11.9834 9.27049 12.162 8.9364 12.4242 8.67417C12.6864 8.41195 13.0205 8.23337 13.3842 8.16103C13.7479 8.08868 14.1249 8.12581 14.4675 8.26773C14.8101 8.40964 15.103 8.64996 15.309 8.95831C15.515 9.26665 15.625 9.62916 15.625 10C15.625 10.4973 15.4275 10.9742 15.0758 11.3258C14.7242 11.6775 14.2473 11.875 13.75 11.875Z"
          fill="currentColor"
        />
      </g>
    </Icon>
  )
}


export function UserIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M18.0406 16.5625C16.8508 14.5055 15.0172 13.0305 12.8773 12.3312C13.9358 11.7011 14.7582 10.741 15.2181 9.59828C15.6781 8.45556 15.7502 7.19344 15.4235 6.00575C15.0967 4.81806 14.3891 3.77046 13.4094 3.02385C12.4296 2.27723 11.2318 1.87287 10 1.87287C8.76818 1.87287 7.57041 2.27723 6.59064 3.02385C5.61088 3.77046 4.90328 4.81806 4.57652 6.00575C4.24975 7.19344 4.3219 8.45556 4.78186 9.59828C5.24183 10.741 6.06419 11.7011 7.12266 12.3312C4.98281 13.0297 3.14922 14.5047 1.95937 16.5625C1.91574 16.6336 1.8868 16.7128 1.87426 16.7953C1.86171 16.8778 1.86583 16.962 1.88635 17.0429C1.90687 17.1238 1.94339 17.1998 1.99374 17.2664C2.0441 17.3329 2.10728 17.3887 2.17955 17.4305C2.25182 17.4722 2.33172 17.499 2.41454 17.5094C2.49735 17.5198 2.5814 17.5135 2.66174 17.4908C2.74207 17.4682 2.81705 17.4297 2.88226 17.3776C2.94746 17.3255 3.00158 17.2608 3.04141 17.1875C4.51328 14.6438 7.11484 13.125 10 13.125C12.8852 13.125 15.4867 14.6438 16.9586 17.1875C16.9984 17.2608 17.0525 17.3255 17.1177 17.3776C17.183 17.4297 17.2579 17.4682 17.3383 17.4908C17.4186 17.5135 17.5026 17.5198 17.5855 17.5094C17.6683 17.499 17.7482 17.4722 17.8204 17.4305C17.8927 17.3887 17.9559 17.3329 18.0063 17.2664C18.0566 17.1998 18.0931 17.1238 18.1137 17.0429C18.1342 16.962 18.1383 16.8778 18.1257 16.7953C18.1132 16.7128 18.0843 16.6336 18.0406 16.5625ZM5.625 7.5C5.625 6.63471 5.88159 5.78885 6.36232 5.06938C6.84305 4.34992 7.52633 3.78916 8.32576 3.45803C9.12519 3.12689 10.0049 3.04025 10.8535 3.20906C11.7022 3.37787 12.4817 3.79455 13.0936 4.40641C13.7054 5.01826 14.1221 5.79781 14.2909 6.64648C14.4597 7.49515 14.3731 8.37481 14.042 9.17424C13.7108 9.97367 13.1501 10.6569 12.4306 11.1377C11.7112 11.6184 10.8653 11.875 10 11.875C8.84006 11.8738 7.72798 11.4124 6.90778 10.5922C6.08758 9.77202 5.62624 8.65994 5.625 7.5Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function SearchIcon({ className, ...props }: IconProps) {
  return (
    <svg
      viewBox="0 0 15 15"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      className={cn('size-3.5', className)}
      {...props}
    >
      <path
        d="M10.5376 10.5376C11.0716 10.0036 11.4953 9.36959 11.7843 8.67184C12.0733 7.9741 12.222 7.22626 12.222 6.47102C12.222 5.71579 12.0733 4.96795 11.7843 4.2702C11.4953 3.57245 11.0716 2.93847 10.5376 2.40444C10.0036 1.8704 9.36959 1.44679 8.67184 1.15777C7.9741 0.868754 7.22626 0.72 6.47102 0.72C5.71579 0.72 4.96795 0.868754 4.2702 1.15777C3.57245 1.44679 2.93847 1.8704 2.40443 2.40444C1.32591 3.48296 0.72 4.94576 0.72 6.47102C0.72 7.99629 1.32591 9.45908 2.40443 10.5376C3.48296 11.6161 4.94576 12.222 6.47102 12.222C7.99629 12.222 9.45908 11.6161 10.5376 10.5376ZM10.5376 10.5376L14.1599 14.1599"
        stroke="currentColor"
        strokeWidth="1.44"
        strokeLinecap="round"
        strokeLinejoin="round"
      />
    </svg>
  )
}

export function CommandIcon({ className, ...props }: IconProps) {
  return (
    <svg
      viewBox="0 0 11 11"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      className={cn('size-2.75', className)}
      {...props}
    >
      <path
        fillRule="evenodd"
        clipRule="evenodd"
        d="M2.27366 0C1.67065 0 1.09233 0.239546 0.66594 0.66594C0.239546 1.09233 0 1.67065 0 2.27366C0 2.87667 0.239546 3.45499 0.66594 3.88138C1.09233 4.30778 1.67065 4.54732 2.27366 4.54732H3.18312C3.30373 4.54732 3.41939 4.59523 3.50467 4.68051C3.58995 4.76579 3.63786 4.88145 3.63786 5.00205V5.91152C3.63786 6.03212 3.58995 6.14778 3.50467 6.23306C3.41939 6.31834 3.30373 6.36625 3.18312 6.36625H2.27366C1.67065 6.36625 1.09233 6.60579 0.66594 7.03219C0.239546 7.45858 0 8.0369 0 8.63991C0 9.24292 0.239546 9.82124 0.66594 10.2476C1.09233 10.674 1.67065 10.9136 2.27366 10.9136C2.57224 10.9136 2.8679 10.8548 3.14375 10.7405C3.41961 10.6262 3.67025 10.4588 3.88138 10.2476C4.09251 10.0365 4.25999 9.78586 4.37425 9.51C4.48851 9.23415 4.54732 8.93849 4.54732 8.63991V7.73045C4.54732 7.60984 4.59523 7.49418 4.68051 7.4089C4.76579 7.32362 4.88145 7.27571 5.00205 7.27571H5.91152C6.03212 7.27571 6.14778 7.32362 6.23306 7.4089C6.31834 7.49418 6.36625 7.60984 6.36625 7.73045V8.63991C6.36625 9.24292 6.60579 9.82124 7.03219 10.2476C7.45858 10.674 8.0369 10.9136 8.63991 10.9136C9.24292 10.9136 9.82124 10.674 10.2476 10.2476C10.674 9.82124 10.9136 9.24292 10.9136 8.63991C10.9136 8.0369 10.674 7.45858 10.2476 7.03219C9.82124 6.60579 9.24292 6.36625 8.63991 6.36625H7.73045C7.60984 6.36625 7.49418 6.31834 7.4089 6.23306C7.32362 6.14778 7.27571 6.03212 7.27571 5.91152V5.00205C7.27571 4.88145 7.32362 4.76579 7.4089 4.68051C7.49418 4.59523 7.60984 4.54732 7.73045 4.54732H8.63991C9.24292 4.54732 9.82124 4.30778 10.2476 3.88138C10.674 3.45499 10.9136 2.87667 10.9136 2.27366C10.9136 1.67065 10.674 1.09233 10.2476 0.66594C9.82124 0.239546 9.24292 0 8.63991 0C8.0369 0 7.45858 0.239546 7.03219 0.66594C6.60579 1.09233 6.36625 1.67065 6.36625 2.27366V3.18312C6.36625 3.30373 6.31834 3.41939 6.23306 3.50467C6.14778 3.58995 6.03212 3.63786 5.91152 3.63786H5.00205C4.88145 3.63786 4.76579 3.58995 4.68051 3.50467C4.59523 3.41939 4.54732 3.30373 4.54732 3.18312V2.27366C4.54732 1.97508 4.48851 1.67942 4.37425 1.40357C4.25999 1.12771 4.09251 0.877069 3.88138 0.66594C3.67025 0.454811 3.41961 0.287334 3.14375 0.173072C2.8679 0.05881 2.57224 0 2.27366 0ZM6.36625 5.00205C6.36625 4.88145 6.31834 4.76579 6.23306 4.68051C6.14778 4.59523 6.03212 4.54732 5.91152 4.54732H5.00205C4.88145 4.54732 4.76579 4.59523 4.68051 4.68051C4.59523 4.76579 4.54732 4.88145 4.54732 5.00205V5.91152C4.54732 6.03212 4.59523 6.14778 4.68051 6.23306C4.76579 6.31834 4.88145 6.36625 5.00205 6.36625H5.91152C6.03212 6.36625 6.14778 6.31834 6.23306 6.23306C6.31834 6.14778 6.36625 6.03212 6.36625 5.91152V5.00205ZM3.63786 2.27366V3.18312C3.63786 3.30373 3.58995 3.41939 3.50467 3.50467C3.41939 3.58995 3.30373 3.63786 3.18312 3.63786H2.27366C2.00385 3.63786 1.74009 3.55785 1.51575 3.40795C1.29141 3.25805 1.11656 3.04499 1.01331 2.79572C0.910055 2.54644 0.883039 2.27215 0.935677 2.00752C0.988315 1.74289 1.11824 1.49981 1.30903 1.30903C1.49981 1.11824 1.74289 0.988315 2.00752 0.935677C2.27215 0.883039 2.54644 0.910055 2.79572 1.01331C3.04499 1.11656 3.25805 1.29141 3.40795 1.51575C3.55785 1.74009 3.63786 2.00385 3.63786 2.27366ZM8.63991 3.63786H7.73045C7.60984 3.63786 7.49418 3.58995 7.4089 3.50467C7.32362 3.41939 7.27571 3.30373 7.27571 3.18312V2.27366C7.27571 2.00385 7.35572 1.74009 7.50562 1.51575C7.65552 1.29141 7.86858 1.11656 8.11785 1.01331C8.36713 0.910055 8.64142 0.883039 8.90605 0.935677C9.17068 0.988315 9.41376 1.11824 9.60454 1.30903C9.79533 1.49981 9.92526 1.74289 9.97789 2.00752C10.0305 2.27215 10.0035 2.54644 9.90026 2.79572C9.79701 3.04499 9.62216 3.25805 9.39782 3.40795C9.17348 3.55785 8.90972 3.63786 8.63991 3.63786ZM3.63786 8.63991V7.73045C3.63786 7.60984 3.58995 7.49418 3.50467 7.4089C3.41939 7.32362 3.30373 7.27571 3.18312 7.27571H2.27366C2.00385 7.27571 1.74009 7.35572 1.51575 7.50562C1.29141 7.65552 1.11656 7.86858 1.01331 8.11785C0.910055 8.36713 0.883039 8.64142 0.935677 8.90605C0.988315 9.17068 1.11824 9.41376 1.30903 9.60454C1.49981 9.79533 1.74289 9.92526 2.00752 9.97789C2.27215 10.0305 2.54644 10.0035 2.79572 9.90026C3.04499 9.79701 3.25805 9.62216 3.40795 9.39782C3.55785 9.17348 3.63786 8.90972 3.63786 8.63991ZM8.63991 7.27571H7.73045C7.60984 7.27571 7.49418 7.32362 7.4089 7.4089C7.32362 7.49418 7.27571 7.60984 7.27571 7.73045V8.63991C7.27571 8.90972 7.35572 9.17348 7.50562 9.39782C7.65552 9.62216 7.86858 9.79701 8.11785 9.90026C8.36713 10.0035 8.64142 10.0305 8.90605 9.97789C9.17068 9.92526 9.41376 9.79533 9.60454 9.60454C9.79533 9.41376 9.92526 9.17068 9.97789 8.90605C10.0305 8.64142 10.0035 8.36713 9.90026 8.11785C9.79701 7.86858 9.62216 7.65552 9.39782 7.50562C9.17348 7.35572 8.90972 7.27571 8.63991 7.27571Z"
        fill="currentColor"
      />
    </svg>
  )
}

export function BellIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <g transform="translate(2.503 1.875)">
        <path
          d="M1.87124 6.25C1.87124 4.75816 2.46387 3.32742 3.51876 2.27252C4.57366 1.21763 6.0044 0.625 7.49624 0.625C8.98808 0.625 10.4188 1.21763 11.4737 2.27252C12.5286 3.32742 13.1212 4.75816 13.1212 6.25C13.1212 9.04844 13.7697 11.2969 14.2853 12.1875C14.3401 12.2824 14.3689 12.3899 14.369 12.4995C14.3691 12.609 14.3404 12.7166 14.2859 12.8115C14.2313 12.9065 14.1527 12.9854 14.058 13.0404C13.9633 13.0955 13.8558 13.1246 13.7462 13.125H1.24624C1.13685 13.1243 1.02955 13.095 0.935058 13.0399C0.840569 12.9847 0.762204 12.9058 0.707793 12.8109C0.653383 12.716 0.624835 12.6085 0.625001 12.4991C0.625167 12.3897 0.654042 12.2822 0.70874 12.1875C1.22358 11.2969 1.87124 9.04766 1.87124 6.25Z"
          stroke="currentColor"
          strokeWidth="1.25"
          strokeLinecap="round"
          strokeLinejoin="round"
        />
      </g>
      <g transform="translate(6.875 15)">
        <path
          d="M0.625 0.625C0.625 1.28804 0.888392 1.92393 1.35723 2.39277C1.82607 2.86161 2.46196 3.125 3.125 3.125C3.78804 3.125 4.42393 2.86161 4.89277 2.39277C5.36161 1.92393 5.625 1.28804 5.625 0.625"
          stroke="currentColor"
          strokeWidth="1.25"
          strokeLinecap="round"
          strokeLinejoin="round"
        />
      </g>
    </Icon>
  )
}

export function CaretDownIcon({ className, ...props }: IconProps) {
  return (
    <svg
      viewBox="0 0 18 18"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      className={cn('size-4.5', className)}
      {...props}
    >
      <path
        d="M15.023 7.14797L9.39797 12.773C9.34573 12.8253 9.28369 12.8668 9.2154 12.8951C9.14712 12.9234 9.07392 12.9379 9 12.9379C8.92608 12.9379 8.85288 12.9234 8.7846 12.8951C8.71631 12.8668 8.65427 12.8253 8.60203 12.773L2.97703 7.14797C2.87148 7.04242 2.81219 6.89927 2.81219 6.75C2.81219 6.60073 2.87148 6.45758 2.97703 6.35203C3.08258 6.24648 3.22573 6.18719 3.375 6.18719C3.52427 6.18719 3.66742 6.24648 3.77297 6.35203L9 11.5798L14.227 6.35203C14.2793 6.29977 14.3413 6.25831 14.4096 6.23003C14.4779 6.20174 14.5511 6.18719 14.625 6.18719C14.6989 6.18719 14.7721 6.20174 14.8404 6.23003C14.9087 6.25831 14.9707 6.29977 15.023 6.35203C15.0752 6.40429 15.1167 6.46634 15.145 6.53462C15.1733 6.6029 15.1878 6.67609 15.1878 6.75C15.1878 6.82391 15.1733 6.8971 15.145 6.96538C15.1167 7.03366 15.0752 7.09571 15.023 7.14797Z"
        fill="currentColor"
      />
    </svg>
  )
}

export function CloseIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M5 5L15 15M15 5L5 15"
        stroke="currentColor"
        strokeWidth="1.5"
        strokeLinecap="round"
      />
    </Icon>
  )
}

export function SidebarCollapseIcon({ className, ...props }: IconProps) {
  return (
    <svg
      viewBox="0 0 15 15.625"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      className={cn('size-3.75', className)}
      {...props}
    >
      <path
        d="M13.5672 8.30781C13.6253 8.36588 13.6713 8.43482 13.7027 8.51069C13.7342 8.58656 13.7503 8.66788 13.7503 8.75C13.7503 8.83212 13.7342 8.91344 13.7027 8.98931C13.6713 9.06518 13.6253 9.13412 13.5672 9.19219C13.5091 9.25026 13.4402 9.29632 13.3643 9.32775C13.2884 9.35917 13.2071 9.37535 13.125 9.37535C13.0429 9.37535 12.9616 9.35917 12.8857 9.32775C12.8098 9.29632 12.7409 9.25026 12.6828 9.19219L8.125 4.63359V15C8.125 15.1658 8.05915 15.3247 7.94194 15.4419C7.82473 15.5592 7.66576 15.625 7.5 15.625C7.33424 15.625 7.17527 15.5592 7.05806 15.4419C6.94085 15.3247 6.875 15.1658 6.875 15V4.63359L2.31719 9.19219C2.25912 9.25026 2.19018 9.29632 2.11431 9.32775C2.03844 9.35917 1.95712 9.37535 1.875 9.37535C1.79288 9.37535 1.71156 9.35917 1.63569 9.32775C1.55982 9.29632 1.49088 9.25026 1.43281 9.19219C1.37474 9.13412 1.32868 9.06518 1.29725 8.98931C1.26583 8.91344 1.24965 8.83212 1.24965 8.75C1.24965 8.66788 1.26583 8.58656 1.29725 8.51069C1.32868 8.43482 1.37474 8.36588 1.43281 8.30781L7.05781 2.68281C7.11586 2.6247 7.18479 2.5786 7.26066 2.54715C7.33654 2.5157 7.41787 2.49951 7.5 2.49951C7.58213 2.49951 7.66346 2.5157 7.73934 2.54715C7.81521 2.5786 7.88414 2.6247 7.94219 2.68281L13.5672 8.30781ZM14.375 0H0.625C0.45924 0 0.300269 0.0658481 0.183058 0.183058C0.0658481 0.300269 0 0.45924 0 0.625C0 0.79076 0.0658481 0.949731 0.183058 1.06694C0.300269 1.18415 0.45924 1.25 0.625 1.25H14.375C14.5408 1.25 14.6997 1.18415 14.8169 1.06694C14.9342 0.949731 15 0.79076 15 0.625C15 0.45924 14.9342 0.300269 14.8169 0.183058C14.6997 0.0658481 14.5408 0 14.375 0Z"
        fill="currentColor"
      />
    </svg>
  )
}

function SmallIcon({ className, ...props }: IconProps) {
  return (
    <svg
      viewBox="0 0 16 16"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      className={cn('size-4', className)}
      {...props}
    />
  )
}

export function PlayIcon({ className, ...props }: IconProps) {
  return (
    <SmallIcon className={className} {...props}>
      <path
        d="M14.525 7.15562L5.52 1.64688C5.36818 1.55391 5.19429 1.50316 5.0163 1.49986C4.83831 1.49656 4.66266 1.54084 4.5075 1.62812C4.35382 1.71405 4.2258 1.83936 4.1366 1.99117C4.04741 2.14298 4.00026 2.3158 4 2.49187V13.5081C4.00116 13.7722 4.10715 14.0251 4.29466 14.2111C4.48218 14.3971 4.73589 14.501 5 14.5C5.18435 14.4999 5.36511 14.4491 5.5225 14.3531L14.525 8.84437C14.6697 8.75617 14.7893 8.63224 14.8723 8.48448C14.9553 8.33672 14.9989 8.17009 14.9989 8.00062C14.9989 7.83116 14.9553 7.66453 14.8723 7.51677C14.7893 7.36901 14.6697 7.24508 14.525 7.15688V7.15562ZM5 13.4963V2.5L13.9894 8L5 13.4963Z"
        fill="currentColor"
      />
    </SmallIcon>
  )
}

export function PauseIcon({ className, ...props }: IconProps) {
  return (
    <SmallIcon className={className} {...props}>
      <path
        d="M12.5 2H10C9.73478 2 9.48043 2.10536 9.29289 2.29289C9.10536 2.48043 9 2.73478 9 3V13C9 13.2652 9.10536 13.5196 9.29289 13.7071C9.48043 13.8946 9.73478 14 10 14H12.5C12.7652 14 13.0196 13.8946 13.2071 13.7071C13.3946 13.5196 13.5 13.2652 13.5 13V3C13.5 2.73478 13.3946 2.48043 13.2071 2.29289C13.0196 2.10536 12.7652 2 12.5 2ZM12.5 13H10V3H12.5V13ZM6 2H3.5C3.23478 2 2.98043 2.10536 2.79289 2.29289C2.60536 2.48043 2.5 2.73478 2.5 3V13C2.5 13.2652 2.60536 13.5196 2.79289 13.7071C2.98043 13.8946 3.23478 14 3.5 14H6C6.26522 14 6.51957 13.8946 6.70711 13.7071C6.89464 13.5196 7 13.2652 7 13V3C7 2.73478 6.89464 2.48043 6.70711 2.29289C6.51957 2.10536 6.26522 2 6 2ZM6 13H3.5V3H6V13Z"
        fill="currentColor"
      />
    </SmallIcon>
  )
}

export function ArrowUpRightIcon({ className, ...props }: IconProps) {
  return (
    <SmallIcon className={cn('-rotate-90', className)} {...props}>
      <path
        d="M12.5 5.5V12C12.5 12.1326 12.4473 12.2598 12.3536 12.3536C12.2598 12.4473 12.1326 12.5 12 12.5H5.5C5.36739 12.5 5.24022 12.4473 5.14645 12.3536C5.05268 12.2598 5 12.1326 5 12C5 11.8674 5.05268 11.7402 5.14645 11.6464C5.24022 11.5527 5.36739 11.5 5.5 11.5H10.7931L3.64625 4.35375C3.55243 4.25993 3.49972 4.13268 3.49972 4C3.49972 3.86732 3.55243 3.74007 3.64625 3.64625C3.74007 3.55243 3.86732 3.49972 4 3.49972C4.13268 3.49972 4.25993 3.55243 4.35375 3.64625L11.5 10.7931V5.5C11.5 5.36739 11.5527 5.24022 11.6464 5.14645C11.7402 5.05268 11.8674 5 12 5C12.1326 5 12.2598 5.05268 12.3536 5.14645C12.4473 5.24022 12.5 5.36739 12.5 5.5Z"
        fill="currentColor"
      />
    </SmallIcon>
  )
}

export function SealCheckIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M17.6453 8.03281C17.3508 7.725 17.0461 7.40781 16.9313 7.12891C16.825 6.87344 16.8187 6.45 16.8125 6.03984C16.8008 5.27734 16.7883 4.41328 16.1875 3.8125C15.5867 3.21172 14.7227 3.19922 13.9602 3.1875C13.55 3.18125 13.1266 3.175 12.8711 3.06875C12.593 2.95391 12.275 2.64922 11.9672 2.35469C11.4281 1.83672 10.8156 1.25 10 1.25C9.18438 1.25 8.57266 1.83672 8.03281 2.35469C7.725 2.64922 7.40781 2.95391 7.12891 3.06875C6.875 3.175 6.45 3.18125 6.03984 3.1875C5.27734 3.19922 4.41328 3.21172 3.8125 3.8125C3.21172 4.41328 3.20312 5.27734 3.1875 6.03984C3.18125 6.45 3.175 6.87344 3.06875 7.12891C2.95391 7.40703 2.64922 7.725 2.35469 8.03281C1.83672 8.57187 1.25 9.18438 1.25 10C1.25 10.8156 1.83672 11.4273 2.35469 11.9672C2.64922 12.275 2.95391 12.5922 3.06875 12.8711C3.175 13.1266 3.18125 13.55 3.1875 13.9602C3.19922 14.7227 3.21172 15.5867 3.8125 16.1875C4.41328 16.7883 5.27734 16.8008 6.03984 16.8125C6.45 16.8187 6.87344 16.825 7.12891 16.9313C7.40703 17.0461 7.725 17.3508 8.03281 17.6453C8.57187 18.1633 9.18438 18.75 10 18.75C10.8156 18.75 11.4273 18.1633 11.9672 17.6453C12.275 17.3508 12.5922 17.0461 12.8711 16.9313C13.1266 16.825 13.55 16.8187 13.9602 16.8125C14.7227 16.8008 15.5867 16.7883 16.1875 16.1875C16.7883 15.5867 16.8008 14.7227 16.8125 13.9602C16.8187 13.55 16.825 13.1266 16.9313 12.8711C17.0461 12.593 17.3508 12.275 17.6453 11.9672C18.1633 11.4281 18.75 10.8156 18.75 10C18.75 9.18438 18.1633 8.57266 17.6453 8.03281ZM16.743 11.1023C16.3687 11.493 15.9812 11.8969 15.7758 12.393C15.5789 12.8695 15.5703 13.4141 15.5625 13.9414C15.5547 14.4883 15.5461 15.0609 15.3031 15.3031C15.0602 15.5453 14.4914 15.5547 13.9414 15.5625C13.4141 15.5703 12.8695 15.5789 12.393 15.7758C11.8969 15.9812 11.493 16.3687 11.1023 16.743C10.7117 17.1172 10.3125 17.5 10 17.5C9.6875 17.5 9.28516 17.1156 8.89766 16.743C8.51016 16.3703 8.10313 15.9812 7.60703 15.7758C7.13047 15.5789 6.58594 15.5703 6.05859 15.5625C5.51172 15.5547 4.93906 15.5461 4.69687 15.3031C4.45469 15.0602 4.44531 14.4914 4.4375 13.9414C4.42969 13.4141 4.42109 12.8695 4.22422 12.393C4.01875 11.8969 3.63125 11.493 3.25703 11.1023C2.88281 10.7117 2.5 10.3125 2.5 10C2.5 9.6875 2.88437 9.28516 3.25703 8.89766C3.62969 8.51016 4.01875 8.10313 4.22422 7.60703C4.42109 7.13047 4.42969 6.58594 4.4375 6.05859C4.44531 5.51172 4.45391 4.93906 4.69687 4.69687C4.93984 4.45469 5.50859 4.44531 6.05859 4.4375C6.58594 4.42969 7.13047 4.42109 7.60703 4.22422C8.10313 4.01875 8.50703 3.63125 8.89766 3.25703C9.28828 2.88281 9.6875 2.5 10 2.5C10.3125 2.5 10.7148 2.88437 11.1023 3.25703C11.4898 3.62969 11.8969 4.01875 12.393 4.22422C12.8695 4.42109 13.4141 4.42969 13.9414 4.4375C14.4883 4.44531 15.0609 4.45391 15.3031 4.69687C15.5453 4.93984 15.5547 5.50859 15.5625 6.05859C15.5703 6.58594 15.5789 7.13047 15.7758 7.60703C15.9812 8.10313 16.3687 8.50703 16.743 8.89766C17.1172 9.28828 17.5 9.6875 17.5 10C17.5 10.3125 17.1156 10.7148 16.743 11.1023ZM13.5672 7.68281C13.6253 7.74086 13.6714 7.80979 13.7029 7.88566C13.7343 7.96154 13.7505 8.04287 13.7505 8.125C13.7505 8.20713 13.7343 8.28846 13.7029 8.36434C13.6714 8.44021 13.6253 8.50914 13.5672 8.56719L9.19219 12.9422C9.13414 13.0003 9.06521 13.0464 8.98934 13.0779C8.91346 13.1093 8.83213 13.1255 8.75 13.1255C8.66787 13.1255 8.58654 13.1093 8.51066 13.0779C8.43479 13.0464 8.36586 13.0003 8.30781 12.9422L6.43281 11.0672C6.31554 10.9499 6.24965 10.7909 6.24965 10.625C6.24965 10.4591 6.31554 10.3001 6.43281 10.1828C6.55009 10.0655 6.70915 9.99965 6.875 9.99965C7.04085 9.99965 7.19991 10.0655 7.31719 10.1828L8.75 11.6164L12.6828 7.68281C12.7409 7.6247 12.8098 7.5786 12.8857 7.54715C12.9615 7.5157 13.0429 7.49951 13.125 7.49951C13.2071 7.49951 13.2885 7.5157 13.3643 7.54715C13.4402 7.5786 13.5091 7.6247 13.5672 7.68281Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function ArrowsCounterClockwiseIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props}>
      <path
        d="M6.875 8.125H3.125C2.95924 8.125 2.80027 8.05915 2.68306 7.94194C2.56585 7.82473 2.5 7.66576 2.5 7.5V3.75C2.5 3.58424 2.56585 3.42527 2.68306 3.30806C2.80027 3.19085 2.95924 3.125 3.125 3.125C3.29076 3.125 3.44973 3.19085 3.56694 3.30806C3.68415 3.42527 3.75 3.58424 3.75 3.75V5.99141L4.89297 4.84844C6.28688 3.44751 8.18 2.65733 10.1562 2.65156H10.1977C12.1571 2.64651 14.0396 3.41362 15.4375 4.78672C15.5516 4.90349 15.6155 5.06028 15.6156 5.22357C15.6156 5.38685 15.5517 5.54365 15.4375 5.66043C15.3234 5.77721 15.1681 5.84469 15.0049 5.84844C14.8416 5.85218 14.6834 5.79189 14.5641 5.68047C13.3989 4.53678 11.8303 3.89774 10.1977 3.90156H10.1625C8.51577 3.90663 6.93834 4.56497 5.77656 5.73203L4.63359 6.875H6.875C7.04076 6.875 7.19973 6.94085 7.31694 7.05806C7.43415 7.17527 7.5 7.33424 7.5 7.5C7.5 7.66576 7.43415 7.82473 7.31694 7.94194C7.19973 8.05915 7.04076 8.125 6.875 8.125ZM16.875 11.875H13.125C12.9592 11.875 12.8003 11.9408 12.6831 12.0581C12.5658 12.1753 12.5 12.3342 12.5 12.5C12.5 12.6658 12.5658 12.8247 12.6831 12.9419C12.8003 13.0592 12.9592 13.125 13.125 13.125H15.3664L14.2234 14.268C13.0619 15.4348 11.4847 16.0932 9.83828 16.0984H9.80313C8.17045 16.1023 6.60189 15.4632 5.43672 14.3195C5.37851 14.26 5.30898 14.2127 5.23222 14.1804C5.15546 14.148 5.07302 14.1314 4.98974 14.1314C4.90646 14.1314 4.82402 14.1481 4.74727 14.1804C4.67051 14.2127 4.60099 14.26 4.54278 14.3196C4.48457 14.3791 4.43886 14.4497 4.40832 14.5272C4.37778 14.6047 4.36303 14.6875 4.36494 14.7707C4.36685 14.854 4.38538 14.936 4.41944 15.012C4.4535 15.088 4.5024 15.1565 4.56328 15.2133C5.96115 16.5864 7.84369 17.3535 9.80313 17.3484H9.84375C11.8197 17.3425 13.7125 16.5523 15.1063 15.1516L16.25 14.0086V16.25C16.25 16.4158 16.3158 16.5747 16.4331 16.6919C16.5503 16.8092 16.7092 16.875 16.875 16.875C17.0408 16.875 17.1997 16.8092 17.3169 16.6919C17.4342 16.5747 17.5 16.4158 17.5 16.25V12.5C17.5 12.3342 17.4342 12.1753 17.3169 12.0581C17.1997 11.9408 17.0408 11.875 16.875 11.875Z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function SpinnerGapIcon({ className, ...props }: IconProps) {
  return (
    <SmallIcon className={className} {...props}>
      <path
        d="M8.5 2V4C8.5 4.13261 8.44732 4.25979 8.35355 4.35355C8.25979 4.44732 8.13261 4.5 8 4.5C7.86739 4.5 7.74021 4.44732 7.64645 4.35355C7.55268 4.25979 7.5 4.13261 7.5 4V2C7.5 1.86739 7.55268 1.74021 7.64645 1.64645C7.74021 1.55268 7.86739 1.5 8 1.5C8.13261 1.5 8.25979 1.55268 8.35355 1.64645C8.44732 1.74021 8.5 1.86739 8.5 2ZM14 7.5H12C11.8674 7.5 11.7402 7.55268 11.6464 7.64645C11.5527 7.74021 11.5 7.86739 11.5 8C11.5 8.13261 11.5527 8.25979 11.6464 8.35355C11.7402 8.44732 11.8674 8.5 12 8.5H14C14.1326 8.5 14.2598 8.44732 14.3536 8.35355C14.4473 8.25979 14.5 8.13261 14.5 8C14.5 7.86739 14.4473 7.74021 14.3536 7.64645C14.2598 7.55268 14.1326 7.5 14 7.5ZM11.1819 10.475C11.0873 10.3852 10.9615 10.3359 10.8311 10.3375C10.7007 10.3392 10.5761 10.3917 10.4839 10.4839C10.3917 10.5761 10.3392 10.7007 10.3375 10.8311C10.3359 10.9615 10.3852 11.0873 10.475 11.1819L11.8888 12.5962C11.9826 12.6901 12.1098 12.7428 12.2425 12.7428C12.3752 12.7428 12.5024 12.6901 12.5962 12.5962C12.6901 12.5024 12.7428 12.3752 12.7428 12.2425C12.7428 12.1098 12.6901 11.9826 12.5962 11.8888L11.1819 10.475ZM8 11.5C7.86739 11.5 7.74021 11.5527 7.64645 11.6464C7.55268 11.7402 7.5 11.8674 7.5 12V14C7.5 14.1326 7.55268 14.2598 7.64645 14.3536C7.74021 14.4473 7.86739 14.5 8 14.5C8.13261 14.5 8.25979 14.4473 8.35355 14.3536C8.44732 14.2598 8.5 14.1326 8.5 14V12C8.5 11.8674 8.44732 11.7402 8.35355 11.6464C8.25979 11.5527 8.13261 11.5 8 11.5ZM4.81812 10.475L3.40375 11.8888C3.30993 11.9826 3.25722 12.1098 3.25722 12.2425C3.25722 12.3752 3.30993 12.5024 3.40375 12.5962C3.49757 12.6901 3.62482 12.7428 3.7575 12.7428C3.89018 12.7428 4.01743 12.6901 4.11125 12.5962L5.525 11.1819C5.61481 11.0873 5.66414 10.9615 5.66247 10.8311C5.6608 10.7007 5.60826 10.5761 5.51606 10.4839C5.42386 10.3917 5.29929 10.3392 5.16891 10.3375C5.03853 10.3359 4.91266 10.3852 4.81812 10.475ZM4.5 8C4.5 7.86739 4.44732 7.74021 4.35355 7.64645C4.25979 7.55268 4.13261 7.5 4 7.5H2C1.86739 7.5 1.74021 7.55268 1.64645 7.64645C1.55268 7.74021 1.5 7.86739 1.5 8C1.5 8.13261 1.55268 8.25979 1.64645 8.35355C1.74021 8.44732 1.86739 8.5 2 8.5H4C4.13261 8.5 4.25979 8.44732 4.35355 8.35355C4.44732 8.25979 4.5 8.13261 4.5 8ZM4.11125 3.40375C4.01743 3.30993 3.89018 3.25722 3.7575 3.25722C3.62482 3.25722 3.49757 3.30993 3.40375 3.40375C3.30993 3.49757 3.25722 3.62482 3.25722 3.7575C3.25722 3.89018 3.30993 4.01743 3.40375 4.11125L4.81812 5.525C4.91266 5.61481 5.03853 5.66414 5.16891 5.66247C5.29929 5.6608 5.42386 5.60826 5.51606 5.51606C5.60826 5.42386 5.6608 5.29929 5.66247 5.16891C5.66414 5.03853 5.61481 4.91266 5.525 4.81812L4.11125 3.40375Z"
        fill="currentColor"
      />
    </SmallIcon>
  )
}

export function FadersHorizontalIcon({ className, ...props }: IconProps) {
  return (
    <SmallIcon className={className} {...props}>
      <path
        d="M11 5C11 4.86739 11.0527 4.74021 11.1464 4.64645C11.2402 4.55268 11.3674 4.5 11.5 4.5H13.5C13.6326 4.5 13.7598 4.55268 13.8536 4.64645C13.9473 4.74021 14 4.86739 14 5C14 5.13261 13.9473 5.25979 13.8536 5.35355C13.7598 5.44732 13.6326 5.5 13.5 5.5H11.5C11.3674 5.5 11.2402 5.44732 11.1464 5.35355C11.0527 5.25979 11 5.13261 11 5ZM2.5 5.5H9V6.5C9 6.63261 9.05268 6.75979 9.14645 6.85355C9.24021 6.94732 9.36739 7 9.5 7C9.63261 7 9.75979 6.94732 9.85355 6.85355C9.94732 6.75979 10 6.63261 10 6.5V3.5C10 3.36739 9.94732 3.24021 9.85355 3.14645C9.75979 3.05268 9.63261 3 9.5 3C9.36739 3 9.24021 3.05268 9.14645 3.14645C9.05268 3.24021 9 3.36739 9 3.5V4.5H2.5C2.36739 4.5 2.24021 4.55268 2.14645 4.64645C2.05268 4.74021 2 4.86739 2 5C2 5.13261 2.05268 5.25979 2.14645 5.35355C2.24021 5.44732 2.36739 5.5 2.5 5.5ZM13.5 10.5H7.5C7.36739 10.5 7.24021 10.5527 7.14645 10.6464C7.05268 10.7402 7 10.8674 7 11C7 11.1326 7.05268 11.2598 7.14645 11.3536C7.24021 11.4473 7.36739 11.5 7.5 11.5H13.5C13.6326 11.5 13.7598 11.4473 13.8536 11.3536C13.9473 11.2598 14 11.1326 14 11C14 10.8674 13.9473 10.7402 13.8536 10.6464C13.7598 10.5527 13.6326 10.5 13.5 10.5ZM5.5 9C5.36739 9 5.24021 9.05268 5.14645 9.14645C5.05268 9.24021 5 9.36739 5 9.5V10.5H2.5C2.36739 10.5 2.24021 10.5527 2.14645 10.6464C2.05268 10.7402 2 10.8674 2 11C2 11.1326 2.05268 11.2598 2.14645 11.3536C2.24021 11.4473 2.36739 11.5 2.5 11.5H5V12.5C5 12.6326 5.05268 12.7598 5.14645 12.8536C5.24021 12.9473 5.36739 13 5.5 13C5.63261 13 5.75979 12.9473 5.85355 12.8536C5.94732 12.7598 6 12.6326 6 12.5V9.5C6 9.36739 5.94732 9.24021 5.85355 9.14645C5.75979 9.05268 5.63261 9 5.5 9Z"
        fill="currentColor"
      />
    </SmallIcon>
  )
}

export function FileArrowUpIcon({ className, ...props }: IconProps) {
  return (
    <SmallIcon className={className} {...props}>
      <path
        d="M13.3538 5.14625L9.85375 1.64625C9.80728 1.59983 9.75212 1.56303 9.69143 1.53793C9.63073 1.51284 9.56568 1.49995 9.5 1.5H3.5C3.23478 1.5 2.98043 1.60536 2.79289 1.79289C2.60536 1.98043 2.5 2.23478 2.5 2.5V13.5C2.5 13.7652 2.60536 14.0196 2.79289 14.2071C2.98043 14.3946 3.23478 14.5 3.5 14.5H12.5C12.7652 14.5 13.0196 14.3946 13.2071 14.2071C13.3946 14.0196 13.5 13.7652 13.5 13.5V5.5C13.5001 5.43432 13.4872 5.36927 13.4621 5.30858C13.437 5.24788 13.4002 5.19272 13.3538 5.14625ZM10 3.20688L11.7931 5H10V3.20688ZM12.5 13.5H3.5V2.5H9V5.5C9 5.63261 9.05268 5.75978 9.14645 5.85355C9.24021 5.94732 9.36739 6 9.5 6H12.5V13.5ZM9.85375 8.64625C9.90021 8.6927 9.93706 8.74786 9.9622 8.80855C9.98734 8.86925 10.0003 8.9343 10.0003 9C10.0003 9.0657 9.98734 9.13075 9.9622 9.19145C9.93706 9.25214 9.90021 9.30729 9.85375 9.35375C9.8073 9.40021 9.75214 9.43705 9.69145 9.4622C9.63075 9.48734 9.5657 9.50028 9.5 9.50028C9.4343 9.50028 9.36925 9.48734 9.30855 9.4622C9.24786 9.43705 9.1927 9.40021 9.14625 9.35375L8.5 8.70687V11.5C8.5 11.6326 8.44732 11.7598 8.35355 11.8536C8.25979 11.9473 8.13261 12 8 12C7.86739 12 7.74021 11.9473 7.64645 11.8536C7.55268 11.7598 7.5 11.6326 7.5 11.5V8.70687L6.85375 9.35375C6.8073 9.40021 6.75214 9.43705 6.69145 9.4622C6.63075 9.48734 6.5657 9.50028 6.5 9.50028C6.4343 9.50028 6.36925 9.48734 6.30855 9.4622C6.24786 9.43705 6.1927 9.40021 6.14625 9.35375C6.09979 9.30729 6.06294 9.25214 6.0378 9.19145C6.01266 9.13075 5.99972 9.0657 5.99972 9C5.99972 8.9343 6.01266 8.86925 6.0378 8.80855C6.06294 8.74786 6.09979 8.6927 6.14625 8.64625L7.64625 7.14625C7.69269 7.09976 7.74783 7.06288 7.80853 7.03772C7.86923 7.01256 7.93429 6.99961 8 6.99961C8.06571 6.99961 8.13077 7.01256 8.19147 7.03772C8.25217 7.06288 8.30731 7.09976 8.35375 7.14625L9.85375 8.64625Z"
        fill="currentColor"
      />
    </SmallIcon>
  )
}

export function CheckCircleIcon({ className, ...props }: IconProps) {
  return (
    <SmallIcon className={className} {...props}>
      <path
        d="M10.8538 6.14625C10.9002 6.19269 10.9371 6.24783 10.9623 6.30853C10.9874 6.36923 11.0004 6.43429 11.0004 6.5C11.0004 6.56571 10.9874 6.63077 10.9623 6.69147C10.9371 6.75217 10.9002 6.80731 10.8538 6.85375L7.35375 10.3538C7.30731 10.4002 7.25217 10.4371 7.19147 10.4623C7.13077 10.4874 7.06571 10.5004 7 10.5004C6.93429 10.5004 6.86923 10.4874 6.80853 10.4623C6.74783 10.4371 6.69269 10.4002 6.64625 10.3538L5.14625 8.85375C5.05243 8.75993 4.99972 8.63268 4.99972 8.5C4.99972 8.36732 5.05243 8.24007 5.14625 8.14625C5.24007 8.05243 5.36732 7.99972 5.5 7.99972C5.63268 7.99972 5.75993 8.05243 5.85375 8.14625L7 9.29313L10.1462 6.14625C10.1927 6.09976 10.2478 6.06288 10.3085 6.03772C10.3692 6.01256 10.4343 5.99961 10.5 5.99961C10.5657 5.99961 10.6308 6.01256 10.6915 6.03772C10.7522 6.06288 10.8073 6.09976 10.8538 6.14625ZM14.5 8C14.5 9.28558 14.1188 10.5423 13.4046 11.6112C12.6903 12.6801 11.6752 13.5132 10.4874 14.0052C9.29972 14.4972 7.99279 14.6259 6.73191 14.3751C5.47104 14.1243 4.31285 13.5052 3.40381 12.5962C2.49476 11.6872 1.8757 10.529 1.6249 9.26809C1.37409 8.00721 1.50281 6.70028 1.99478 5.51256C2.48675 4.32484 3.31987 3.30968 4.38879 2.59545C5.45771 1.88122 6.71442 1.5 8 1.5C9.72335 1.50182 11.3756 2.18722 12.5942 3.40582C13.8128 4.62441 14.4982 6.27665 14.5 8ZM13.5 8C13.5 6.9122 13.1774 5.84883 12.5731 4.94436C11.9687 4.03989 11.1098 3.33494 10.1048 2.91866C9.09977 2.50238 7.9939 2.39346 6.927 2.60568C5.86011 2.8179 4.8801 3.34172 4.11091 4.11091C3.34172 4.8801 2.8179 5.86011 2.60568 6.927C2.39346 7.9939 2.50238 9.09977 2.91866 10.1048C3.33494 11.1098 4.03989 11.9687 4.94436 12.5731C5.84883 13.1774 6.9122 13.5 8 13.5C9.45818 13.4983 10.8562 12.9184 11.8873 11.8873C12.9184 10.8562 13.4983 9.45818 13.5 8Z"
        fill="currentColor"
      />
    </SmallIcon>
  )
}

export function TimelineCheckIcon({ className, ...props }: IconProps) {
  return (
    <svg
      viewBox="-1 -1 15 15"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      className={cn('size-4 shrink-0 overflow-visible', className)}
      {...props}
    >
      <path
        fillRule="evenodd"
        clipRule="evenodd"
        d="M6.5 0A6.5 6.5 0 1 0 13 6.5 6.507 6.507 0 0 0 6.5 0m2.854 5.354-3.5 3.5a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 1 1 .708-.708L5.5 7.793l3.146-3.147a.5.5 0 1 1 .708.708"
        fill="currentColor"
      />
    </svg>
  )
}

export function StatusWarningIcon({ className, ...props }: IconProps) {
  return (
    <SmallIcon className={className} {...props}>
      <path
        d="M14.8 11.7556L9.33438 2.26375C9.1978 2.0312 9.00281 1.83839 8.76875 1.70441C8.5347 1.57044 8.26969 1.49996 8 1.49996C7.73031 1.49996 7.4653 1.57044 7.23125 1.70441C6.99719 1.83839 6.80221 2.0312 6.66563 2.26375L1.2 11.7556C1.06859 11.9806 0.99933 12.2364 0.99933 12.4969C0.99933 12.7574 1.06859 13.0132 1.2 13.2381C1.33483 13.4721 1.52948 13.6659 1.76398 13.7998C1.99847 13.9337 2.26436 14.0028 2.53437 14H13.4656C13.7354 14.0026 14.0011 13.9334 14.2353 13.7995C14.4696 13.6656 14.664 13.4719 14.7987 13.2381C14.9304 13.0133 14.9998 12.7575 15 12.497C15.0003 12.2365 14.9312 11.9807 14.8 11.7556ZM13.9331 12.7375C13.8855 12.8188 13.8171 12.8859 13.7349 12.9321C13.6528 12.9782 13.5598 13.0016 13.4656 13H2.53437C2.44017 13.0016 2.34723 12.9782 2.26508 12.9321C2.18293 12.8859 2.11452 12.8188 2.06687 12.7375C2.02372 12.6644 2.00095 12.5811 2.00095 12.4963C2.00095 12.4114 2.02372 12.3281 2.06687 12.255L7.5325 2.76312C7.58111 2.68223 7.64983 2.6153 7.73197 2.56883C7.81411 2.52236 7.90688 2.49793 8.00125 2.49793C8.09562 2.49793 8.18839 2.52236 8.27053 2.56883C8.35267 2.6153 8.42139 2.68223 8.47 2.76312L13.9356 12.255C13.9784 12.3283 14.0007 12.4117 14.0003 12.4966C13.9999 12.5815 13.9767 12.6647 13.9331 12.7375ZM7.5 9V6.5C7.5 6.36739 7.55268 6.24021 7.64645 6.14645C7.74021 6.05268 7.86739 6 8 6C8.13261 6 8.25979 6.05268 8.35355 6.14645C8.44732 6.24021 8.5 6.36739 8.5 6.5V9C8.5 9.13261 8.44732 9.25979 8.35355 9.35355C8.25979 9.44732 8.13261 9.5 8 9.5C7.86739 9.5 7.74021 9.44732 7.64645 9.35355C7.55268 9.25979 7.5 9.13261 7.5 9ZM8.75 11.25C8.75 11.3983 8.70601 11.5433 8.6236 11.6667C8.54119 11.79 8.42406 11.8861 8.28701 11.9429C8.14997 11.9997 7.99917 12.0145 7.85368 11.9856C7.7082 11.9566 7.57456 11.8852 7.46967 11.7803C7.36478 11.6754 7.29335 11.5418 7.26441 11.3963C7.23547 11.2508 7.25032 11.1 7.30709 10.963C7.36386 10.8259 7.45999 10.7088 7.58332 10.6264C7.70666 10.544 7.85166 10.5 8 10.5C8.19891 10.5 8.38968 10.579 8.53033 10.7197C8.67098 10.8603 8.75 11.0511 8.75 11.25Z"
        fill="currentColor"
      />
    </SmallIcon>
  )
}

// --- Inline sidebar icons (converted from Figma SVG exports) ---

export function SidebarHomeActiveIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 20 20">
      <g> <path d="M7.51667 2.36667L3.025 5.86667C2.275 6.45 1.66667 7.69167 1.66667 8.63333V14.8083C1.66667 16.7417 3.24167 18.325 5.175 18.325H14.825C16.7583 18.325 18.3333 16.7417 18.3333 14.8167V8.75C18.3333 7.74167 17.6583 6.45 16.8333 5.875L11.6833 2.26667C10.5167 1.45 8.64167 1.49167 7.51667 2.36667Z" fill="currentColor"/> <path d="M10 14.9917V12.4917" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"/> <g opacity="0"> </g> </g>
    </Icon>
  )
}

export function SidebarHomeMutedIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 20 20">
      <g> <path d="M7.51667 2.36667L3.025 5.86667C2.275 6.45 1.66667 7.69167 1.66667 8.63333V14.8083C1.66667 16.7417 3.24167 18.325 5.175 18.325H14.825C16.7583 18.325 18.3333 16.7417 18.3333 14.8167V8.75C18.3333 7.74167 17.6583 6.45 16.8333 5.875L11.6833 2.26667C10.5167 1.45 8.64167 1.49167 7.51667 2.36667Z" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"/> <path d="M10 14.9917V12.4917" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"/> <g opacity="0"> </g> </g>
    </Icon>
  )
}

export function SidebarNetWorthIcon({ className, ...props }: IconProps) {
  return (
    <Icon
      className={className}
      {...props}
      viewBox="0 0 24 24"
      stroke="currentColor"
      strokeWidth="1.5"
      strokeLinecap="round"
    >
      <path d="M18.4167 8.14815C18.4167 5.85719 15.5438 4 12 4C8.45617 4 5.58333 5.85719 5.58333 8.14815C5.58333 10.4391 7.33333 11.7037 12 11.7037C16.6667 11.7037 19 12.8889 19 15.8519C19 18.8148 15.866 20 12 20C8.13401 20 5 18.1428 5 15.8519" />
      <path d="M12 2V22" strokeLinejoin="round" />
    </Icon>
  )
}

export function SidebarAnalyticsIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 20 20">
      <g> <path d="M5.83333 15V13.3333M10 15V12.5M14.1667 15V10.8333M2.08333 10C2.08333 6.26805 2.08333 4.40207 3.2427 3.2427C4.40207 2.08333 6.26805 2.08333 10 2.08333C13.7319 2.08333 15.5979 2.08333 16.7573 3.2427C17.9167 4.40207 17.9167 6.26805 17.9167 10C17.9167 13.7319 17.9167 15.5979 16.7573 16.7573C15.5979 17.9167 13.7319 17.9167 10 17.9167C6.26805 17.9167 4.40207 17.9167 3.2427 16.7573C2.08333 15.5979 2.08333 13.7319 2.08333 10Z" stroke="currentColor" strokeWidth="1.25" strokeLinecap="round" strokeLinejoin="round"/> <path d="M4.99349 9.57192C6.78941 9.63175 10.8617 9.36067 13.1781 5.68444M11.6602 5.24029L13.2232 4.98874C13.4137 4.96449 13.6933 5.11488 13.7621 5.29415L14.1753 6.65952" stroke="currentColor" strokeWidth="1.25" strokeLinecap="round" strokeLinejoin="round"/> </g>
    </Icon>
  )
}

export function SidebarFolderIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 20 20">
      <g> <path d="M1.66667 15.8333V6.29085C1.66667 5.08763 1.66667 4.48602 1.86943 4.01373C2.12225 3.42488 2.59154 2.95558 3.18039 2.70277C3.65268 2.5 4.24837 2.5 5.45752 2.5H5.86926C6.37349 2.5 6.85063 2.72828 7.16701 3.12091L8.68125 5M8.68125 5H13.3333C14.5001 5 15.0835 5 15.5292 5.22707C15.9212 5.42681 16.2398 5.74552 16.4396 6.13752C16.6667 6.58317 16.6667 7.16656 16.6667 8.33333V9.16667M8.68125 5H5.83333" stroke="currentColor" strokeWidth="1.25" strokeLinecap="round" strokeLinejoin="round"/> <path d="M2.63168 12.9287L2.88036 12.3098C3.49191 10.7874 3.79769 10.0263 4.43533 9.5965C5.07297 9.16667 5.89631 9.16667 7.54297 9.16667H14.2599C16.5003 9.16667 17.6205 9.16667 18.1185 9.89892C18.6164 10.6313 18.2004 11.6668 17.3683 13.738L17.1197 14.3569C16.5081 15.8793 16.2023 16.6403 15.5647 17.0702C14.927 17.5 14.1037 17.5 12.457 17.5H5.7401C3.49967 17.5 2.37946 17.5 1.88152 16.7677C1.38357 16.0354 1.79961 14.9998 2.63168 12.9287Z" stroke="currentColor" strokeWidth="1.25" strokeLinejoin="round"/> </g>
    </Icon>
  )
}

export function SidebarLinkIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 20 20">
      <g> <path d="M7.61949 8.90915L7.79192 8.73674C9.44083 7.08775 12.1143 7.08775 13.7632 8.73674C15.4122 10.3857 15.4122 13.0592 13.7632 14.7081L11.3747 17.0966C9.72583 18.7456 7.05232 18.7456 5.40337 17.0966C3.75443 15.4477 3.75443 12.7742 5.40337 11.1252L5.79033 10.7383" stroke="currentColor" strokeWidth="1.25" strokeLinecap="round"/> <path d="M14.2097 9.26166L14.5966 8.87475C16.2456 7.22579 16.2456 4.55232 14.5966 2.90337C12.9477 1.25443 10.2742 1.25443 8.62525 2.90337L6.23671 5.29192C4.58776 6.94086 4.58776 9.61433 6.23671 11.2632C7.88566 12.9122 10.5592 12.9122 12.2081 11.2632L12.3805 11.0908" stroke="currentColor" strokeWidth="1.25" strokeLinecap="round"/> </g>
    </Icon>
  )
}

export function SidebarAiIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 20 20">
      <g> <path d="M3.33333 10C3.33333 6.8573 3.33333 5.28596 4.30964 4.30964C5.28596 3.33333 6.8573 3.33333 10 3.33333C13.1427 3.33333 14.7141 3.33333 15.6903 4.30964C16.6667 5.28596 16.6667 6.8573 16.6667 10C16.6667 13.1427 16.6667 14.7141 15.6903 15.6903C14.7141 16.6667 13.1427 16.6667 10 16.6667C6.8573 16.6667 5.28596 16.6667 4.30964 15.6903C3.33333 14.7141 3.33333 13.1427 3.33333 10Z" stroke="currentColor" strokeWidth="1.25" strokeLinejoin="round"/> <path d="M6.25 12.5L7.78491 7.89528C7.86359 7.65923 8.0845 7.5 8.33333 7.5C8.58217 7.5 8.80308 7.65923 8.88175 7.89528L10.4167 12.5M7.08333 10.8333H9.58333" stroke="currentColor" strokeWidth="1.25" strokeLinecap="round" strokeLinejoin="round"/> <path d="M12.9167 7.5V12.5" stroke="currentColor" strokeWidth="1.25" strokeLinecap="round" strokeLinejoin="round"/> <path d="M6.66667 1.66667V3.33333M13.3333 1.66667V3.33333M10 1.66667V3.33333M6.66667 16.6667V18.3333M10 16.6667V18.3333M13.3333 16.6667V18.3333M18.3333 13.3333H16.6667M3.33333 6.66667H1.66667M3.33333 13.3333H1.66667M3.33333 10H1.66667M18.3333 6.66667H16.6667M18.3333 10H16.6667" stroke="currentColor" strokeWidth="1.25" strokeLinecap="round" strokeLinejoin="round"/> </g>
    </Icon>
  )
}

export function SidebarRealEstateIcon({ className, ...props }: IconProps) {
  return (
    <Icon
      className={className}
      {...props}
      viewBox="0 0 24 24"
      stroke="currentColor"
      strokeWidth="1.5"
      strokeLinecap="round"
    >
      <path d="M6.50153 4.88815L9.50153 3.67269C11.9917 2.66381 13.2368 2.15936 14.1184 2.75565C15 3.35194 15 4.6985 15 7.39161V21.5H4V8.60707C4 7.29651 4 6.64122 4.34192 6.13291C4.68384 5.62459 5.28973 5.37911 6.50153 4.88815Z" strokeLinejoin="round" />
      <path d="M15 8.5H16C17.8856 8.5 18.8284 8.5 19.4142 9.08579C20 9.67157 20 10.6144 20 12.5V21.5H15" strokeLinejoin="round" />
      <path d="M2 21.5H22" />
      <path d="M8 8.5H11" strokeLinejoin="round" />
      <path d="M8 12.5H11" strokeLinejoin="round" />
      <path d="M8 16.5H11" strokeLinejoin="round" />
    </Icon>
  )
}

export function SidebarFixedIncomeIcon({ className, ...props }: IconProps) {
  return (
    <Icon
      className={className}
      {...props}
      viewBox="0 0 24 24"
      stroke="currentColor"
      strokeWidth="1.5"
      strokeLinecap="round"
      strokeLinejoin="round"
    >
      <path d="M14.4998 12.001C14.4998 13.3817 13.3805 14.501 11.9998 14.501C10.6191 14.501 9.49982 13.3817 9.49982 12.001C9.49982 10.6203 10.6191 9.50098 11.9998 9.50098C13.3805 9.50098 14.4998 10.6203 14.4998 12.001Z" />
      <path d="M16 5.00098C18.4794 5.00098 20.1903 5.38518 21.1329 5.6773C21.6756 5.84549 22 6.35987 22 6.92803V16.6833C22 17.7984 20.7719 18.6374 19.6762 18.4305C18.7361 18.253 17.5107 18.1104 16 18.1104C11.2491 18.1104 10.1096 19.9161 3.1448 18.3802C2.47265 18.232 2 17.6275 2 16.9392V6.92214C2 5.94628 2.92079 5.23464 3.87798 5.42458C10.1967 6.67844 11.4209 5.00098 16 5.00098Z" />
      <path d="M2 9.00098C3.95133 9.00098 5.70483 7.40605 5.92901 5.75514M18.5005 5.50098C18.5005 7.54062 20.2655 9.46997 22 9.46997M22 15.001C20.1009 15.001 18.2601 16.3112 18.102 18.0993M6.00049 18.4971C6.00049 16.2879 4.20963 14.4971 2.00049 14.4971" />
    </Icon>
  )
}

export function SidebarSettingsIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 18.3276 17.3794">
      <g> <path fillRule="evenodd" clipRule="evenodd" d="M7.09143 0.0604664C6.74243 -0.0178377 6.38185 -0.0198266 6.03331 0.0529726C5.63494 0.13618 5.27507 0.345656 4.86632 0.583591L4.7967 0.624089C4.79067 0.627388 4.78469 0.630763 4.77875 0.634211L4.37236 0.870073L4.36334 0.875453L4.28317 0.921883C3.87746 1.15666 3.51926 1.36395 3.25054 1.66641C3.01436 1.93225 2.83803 2.24511 2.73257 2.58397C2.61172 2.97231 2.61918 3.3881 2.6277 3.86305L2.62933 3.95604L2.63529 4.30993C2.63575 4.33752 2.63639 4.36022 2.63681 4.37519L2.637 4.38216L2.63728 4.39347C2.63482 4.52353 2.60088 4.65353 2.53747 4.77178C2.53268 4.78072 2.52696 4.79081 2.49763 4.84159L2.47222 4.88564C2.46228 4.9029 2.46049 4.90602 2.45746 4.91089C2.38704 5.02437 2.29072 5.11898 2.17642 5.18713C2.17027 5.19081 2.16515 5.19364 2.13577 5.20991L2.10585 5.22648L1.80455 5.39345L1.71902 5.44076C1.3032 5.67052 0.937814 5.87242 0.661462 6.17226C0.419317 6.43499 0.236579 6.74643 0.125084 7.08533C-0.00267522 7.47366 -0.00126149 7.89175 0.00035419 8.36957L0.000635127 8.46296L0.00169912 8.9314L0.00184172 9.01854C0.00247055 9.49674 0.00301752 9.91272 0.131478 10.2997C0.24285 10.6352 0.424057 10.9449 0.665654 11.207C0.940424 11.5049 1.30252 11.7058 1.71523 11.9347L1.8001 11.9819L2.09872 12.148L2.12841 12.1645C2.16234 12.1834 2.16799 12.1865 2.17486 12.1906C2.28824 12.2589 2.3839 12.3534 2.45365 12.4661C2.45946 12.4755 2.46581 12.4864 2.49745 12.5416L2.52031 12.5815C2.53442 12.6061 2.53696 12.6106 2.54019 12.6167C2.60069 12.7312 2.63372 12.8597 2.63597 12.9919C2.63616 13.0032 2.6361 13.0168 2.63507 13.0779L2.62933 13.4175L2.6277 13.5102C2.61913 13.9872 2.61162 14.4046 2.73323 14.7942C2.8394 15.1343 3.01692 15.4476 3.25418 15.7135C3.52492 16.0169 3.88602 16.2244 4.29635 16.4601L4.38193 16.5094L4.79335 16.7464L4.87811 16.7954C5.28701 17.0317 5.64645 17.2394 6.04379 17.3216C6.39152 17.3936 6.75091 17.3909 7.09804 17.313C7.49377 17.2241 7.84994 17.0102 8.25438 16.7674L8.33889 16.7167L8.63374 16.5401C8.6823 16.5111 8.69449 16.504 8.70423 16.4986C8.82044 16.4339 8.94943 16.3983 9.08169 16.394C9.09201 16.3937 9.10377 16.3936 9.16327 16.3936C9.2229 16.3936 9.23459 16.3937 9.24492 16.394C9.37823 16.3983 9.50845 16.4344 9.6242 16.4989C9.6302 16.5023 9.63788 16.5068 9.67786 16.5308L9.99132 16.719L10.0752 16.7695C10.4819 17.0143 10.8391 17.2293 11.2367 17.3186C11.5841 17.3965 11.9449 17.3999 12.295 17.3267C12.6933 17.2435 13.0537 17.0338 13.4622 16.796L13.5475 16.7464L13.96 16.5069L14.0448 16.4579C14.4508 16.2229 14.8092 16.0155 15.078 15.713C15.3139 15.4474 15.4905 15.1348 15.5961 14.7955C15.716 14.4102 15.7085 13.9975 15.7001 13.5328L15.6984 13.4357L15.6922 13.0695C15.6914 13.0191 15.6915 13.0025 15.6917 12.9892C15.6936 12.8556 15.7276 12.7245 15.7904 12.6074C15.7952 12.5985 15.801 12.5882 15.8303 12.5375L15.8308 12.4431L15.8713 12.4682C15.9417 12.3548 16.0382 12.26 16.1525 12.1918C16.1603 12.1872 16.1692 12.1821 16.2098 12.1596L16.2224 12.1528L16.5237 11.9858L16.6102 11.938C17.0254 11.7085 17.3911 11.5065 17.6673 11.2068C17.9094 10.9441 18.092 10.633 18.2035 10.294C18.3304 9.90849 18.3289 9.49297 18.3272 9.02425L18.3269 8.92627L18.3258 8.44778L18.3257 8.34996C18.3252 7.87847 18.3248 7.46407 18.1971 7.07954C18.0853 6.74272 17.9029 6.43325 17.6623 6.17226C17.3879 5.87466 17.0257 5.67377 16.6145 5.44568L16.5286 5.39803L16.5184 5.39244L16.222 5.22755C16.1751 5.20147 16.162 5.19385 16.1515 5.18759C16.0372 5.11911 15.9415 5.0249 15.8718 4.91275C15.8692 4.90863 15.868 4.90639 15.8616 4.89521L15.831 4.84219C15.8013 4.79075 15.7954 4.78034 15.7906 4.77132C15.7276 4.65367 15.6937 4.5229 15.6917 4.39043C15.6915 4.3768 15.6914 4.35972 15.6922 4.30883L15.6982 3.95445L15.6999 3.85642C15.7084 3.38712 15.7159 2.97237 15.5951 2.58527C15.4889 2.24502 15.3112 1.93172 15.074 1.66599C14.8029 1.3621 14.4417 1.15454 14.0299 0.917897L13.9467 0.87005L13.5352 0.632917L13.4499 0.583662C13.0413 0.347546 12.6818 0.139753 12.2846 0.0575462C11.936 -0.0145987 11.5768 -0.0111455 11.2305 0.0665916C10.8351 0.155348 10.4798 0.36872 10.0764 0.610922L10.0083 0.651833L9.86615 0.736606L9.6946 0.839321C9.64466 0.869228 9.63346 0.875773 9.62417 0.880938C9.50875 0.945109 9.37961 0.980823 9.24641 0.985098C9.23611 0.985428 9.22437 0.985527 9.16486 0.985527C9.10549 0.985527 9.09276 0.985426 9.0826 0.9851C8.94928 0.980811 8.81985 0.944938 8.7041 0.88042C8.69811 0.877082 8.69375 0.874458 8.66837 0.859204L8.63401 0.838562L8.33728 0.660419L8.25245 0.609395C8.21171 0.584867 8.17146 0.560632 8.13161 0.536789C7.77426 0.322996 7.44894 0.140679 7.09143 0.0604664ZM6.37407 1.68443C6.49131 1.65994 6.61128 1.66084 6.72656 1.6867C6.82653 1.70913 6.93897 1.7649 7.47942 2.08935L7.77615 2.2675L7.79511 2.27891L7.82828 2.29882C7.84968 2.3116 7.87151 2.32443 7.89262 2.3362C8.2414 2.53061 8.63081 2.6381 9.02902 2.6509C9.06946 2.65221 9.11059 2.6522 9.15564 2.65219H9.17404L9.19082 2.65219C9.22943 2.65218 9.26448 2.65204 9.29987 2.65091C9.69706 2.63816 10.0857 2.53128 10.4341 2.33759C10.4705 2.31731 10.5057 2.29628 10.5475 2.27124L10.8296 2.10234C10.8359 2.09877 10.8422 2.09511 10.8484 2.09137C11.3852 1.76998 11.4963 1.71506 11.5955 1.69279L11.6111 1.68944C11.7224 1.66668 11.8365 1.66679 11.9468 1.68962C12.0468 1.71031 12.1594 1.7637 12.7031 2.07698L13.1146 2.31411C13.6591 2.62788 13.7622 2.69917 13.8305 2.77566C13.9097 2.86438 13.9688 2.96876 14.0042 3.08199C14.0344 3.17868 14.0423 3.3021 14.0318 3.92641L14.0258 4.2808L14.0252 4.4159C14.0313 4.81524 14.1333 5.20698 14.3214 5.55819C14.3405 5.59384 14.3606 5.62873 14.3832 5.66785L14.3878 5.67584L14.4002 5.69729C14.4171 5.72673 14.4374 5.76216 14.456 5.79217C14.6663 6.13071 14.9542 6.4132 15.2951 6.61736C15.3304 6.63852 15.3638 6.65736 15.4118 6.68401L15.7169 6.85378L15.7271 6.85933C15.775 6.886 15.8195 6.91085 15.8608 6.93403C16.2839 7.17144 16.3745 7.23429 16.437 7.30205C16.5171 7.38899 16.578 7.4923 16.6153 7.60465C16.6475 7.70144 16.6577 7.82527 16.6592 8.45157L16.6603 8.93006C16.6617 9.55384 16.6519 9.67724 16.6203 9.77319C16.5831 9.88648 16.5223 9.98997 16.4418 10.0773C16.3779 10.1466 16.2843 10.2109 15.8416 10.4581L15.7159 10.528L15.4256 10.6888C15.082 10.8938 14.666 11.2497 14.4552 11.5893C14.4351 11.6217 14.4164 11.653 14.387 11.7039L14.3824 11.712C14.3602 11.7505 14.3404 11.7847 14.3216 11.8198C14.2097 12.0283 14.1286 12.2509 14.0797 12.4806C14.0459 12.6393 14.0276 12.8014 14.0252 12.9645C14.0246 13.0039 14.0249 13.0407 14.0258 13.0975L14.032 13.4637C14.0424 14.0822 14.0345 14.2046 14.0047 14.3002C13.9696 14.4132 13.9108 14.5174 13.8321 14.606C13.7648 14.6817 13.663 14.7523 13.1234 15.0655L12.7109 15.3049C12.1671 15.6205 12.0542 15.6744 11.9543 15.6953C11.8386 15.7194 11.7185 15.7185 11.6016 15.6923C11.5015 15.6699 11.3894 15.6144 10.8492 15.2901L10.5297 15.0982C10.4996 15.0802 10.4682 15.0613 10.4357 15.0432C10.0869 14.8487 9.69672 14.741 9.2985 14.7282C9.25796 14.7269 9.21796 14.7269 9.17246 14.7269H9.15407C9.10868 14.7269 9.06869 14.7269 9.02826 14.7282C8.63016 14.741 8.24191 14.8487 7.89434 15.0419C7.85734 15.0625 7.82228 15.0834 7.77755 15.1102L7.48269 15.2867C6.94441 15.6091 6.83255 15.6644 6.73297 15.6868C6.6177 15.7126 6.49792 15.7136 6.38157 15.6896C6.28156 15.6689 6.16898 15.6156 5.62549 15.3024L5.21407 15.0653C4.66887 14.7511 4.56587 14.6802 4.49774 14.6038C4.41869 14.5152 4.35958 14.4109 4.32418 14.2975C4.29357 14.1995 4.28517 14.0733 4.29576 13.4457L4.30154 13.1037C4.30243 13.051 4.30315 13.008 4.30239 12.9635C4.29771 12.6886 4.248 12.4164 4.15503 12.158C4.11569 12.0487 4.0686 11.9418 4.01391 11.8383C3.99583 11.8041 3.97491 11.7676 3.95578 11.7344L3.94392 11.7137L3.93905 11.7052C3.91491 11.663 3.89365 11.6258 3.87085 11.589C3.66179 11.2512 3.3751 10.9679 3.03462 10.7628C3.00056 10.7423 2.96368 10.7219 2.92863 10.7024L2.90896 10.6915L2.8151 10.6393L2.61034 10.5254C2.06327 10.2211 1.96013 10.1522 1.89095 10.0772C1.81173 9.99125 1.751 9.88825 1.71326 9.77457C1.68092 9.67715 1.66978 9.55113 1.66836 8.92761L1.6673 8.45918C1.66587 7.82994 1.67612 7.70391 1.70827 7.60618C1.74555 7.49288 1.80653 7.3891 1.887 7.30179C1.95655 7.22633 2.06104 7.15679 2.61241 6.85124L2.91371 6.68426L2.93217 6.67406C2.96435 6.65628 2.99862 6.63734 3.03 6.61863C3.30355 6.45552 3.54248 6.24216 3.73488 5.99066C3.78423 5.92615 3.83052 5.85912 3.87356 5.78979C3.89234 5.75953 3.91186 5.72558 3.92918 5.69545L3.94081 5.67525L3.94534 5.66743C3.96772 5.62869 3.98745 5.59453 4.00631 5.55938C4.19422 5.20893 4.29787 4.81656 4.30382 4.41482C4.3043 4.38246 4.3035 4.35328 4.30305 4.33666L4.30278 4.32717C4.30237 4.31248 4.30201 4.2995 4.30172 4.28189L4.29576 3.92801C4.28524 3.30244 4.29354 3.17696 4.32396 3.07921C4.35925 2.96581 4.41808 2.86164 4.49649 2.77338C4.56375 2.69768 4.66527 2.62725 5.20448 2.3143L5.21353 2.30891L5.59947 2.08491C5.60554 2.08159 5.61157 2.07819 5.61756 2.07471C6.16157 1.75897 6.27402 1.70533 6.37407 1.68443Z" fill="currentColor"/> <path fillRule="evenodd" clipRule="evenodd" d="M9.16405 4.52308C6.86286 4.52308 4.99738 6.38856 4.99738 8.68975C4.99738 10.198 5.79878 11.5191 6.99901 12.2505C7.62997 12.6349 8.37114 12.8564 9.16405 12.8564C9.86039 12.8564 10.5168 12.6856 11.0938 12.3836C11.8686 11.978 12.5 11.3357 12.8921 10.5527C13.1727 9.99211 13.3307 9.35938 13.3307 8.68975L13.3307 8.677C13.3241 6.46526 11.5942 4.65902 9.41317 4.5304C9.33521 4.52581 9.25667 4.52335 9.17761 4.5231L9.16405 4.52308ZM9.16405 6.18975C7.78333 6.18975 6.66404 7.30903 6.66404 8.68975C6.66404 10.0705 7.78333 11.1897 9.16405 11.1897C10.5448 11.1897 11.664 10.0705 11.664 8.68975C11.664 8.64399 11.6628 8.59853 11.6604 8.55338C11.6136 7.68308 11.1217 6.93106 10.4083 6.5209C10.0419 6.31023 9.61704 6.18975 9.16405 6.18975Z" fill="currentColor"/> </g>
    </Icon>
  )
}

export function SidebarNotificationsIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 15.833 17.5">
      <path d="M11.667 0C13.968 0.000176052 15.833 1.86591 15.833 4.16699C15.833 5.5311 15.1778 6.74169 14.167 7.50098V10.4883L14.5117 10.834C14.8238 11.1462 14.9999 11.5695 15 12.0117V12.5C15 13.4205 14.2535 14.167 13.333 14.167H10.833C10.833 16.0079 9.34095 17.5 7.5 17.5C5.65908 17.5 4.16704 16.0079 4.16699 14.167H1.66699C0.74616 14.167 0 13.4201 0 12.5V12.0117C8.86712e-05 11.5694 0.176495 11.1461 0.488281 10.834L0.833008 10.4883V7.5C0.833175 3.81826 3.8182 0.833984 7.5 0.833984C8.00243 0.833984 8.49295 0.889274 8.96484 0.995117C9.69181 0.3755 10.6362 0 11.667 0ZM5.83301 14.167C5.83304 15.0874 6.57955 15.834 7.5 15.834C8.42047 15.834 9.16699 15.0875 9.16699 14.167H5.83301ZM7.5 2.5C4.73867 2.5 2.50017 4.73874 2.5 7.5V10.6025C2.49995 10.9722 2.35297 11.3255 2.09277 11.5859L1.66699 12.0117V12.5H13.333V12.0117L12.9072 11.5869C12.6461 11.3258 12.5001 10.9713 12.5 10.6025V8.25C12.2306 8.30475 11.952 8.33396 11.667 8.33398C9.36581 8.33398 7.5 6.46818 7.5 4.16699C7.5 3.57918 7.62189 3.01921 7.8418 2.51172C7.72892 2.50412 7.61495 2.5 7.5 2.5ZM11.667 1.66699C10.9504 1.66699 10.3045 1.96786 9.84766 2.45215C9.83068 2.47263 9.81268 2.49211 9.79395 2.51074C9.40324 2.95227 9.16699 3.53137 9.16699 4.16699C9.16699 5.5477 10.2863 6.66699 11.667 6.66699C12.1186 6.66693 12.5403 6.54767 12.9043 6.33984C13.6602 5.90805 14.167 5.09613 14.167 4.16699C14.167 2.78639 13.0476 1.66717 11.667 1.66699Z" fill="currentColor"/>
    </Icon>
  )
}

export function SidebarLogoutIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 13.5 13.5">
      <path d="M10.3789 2.53383e-06C10.7742 -1.08772e-05 11.1157 -0.000492304 11.3965 0.0224635C11.6929 0.0467117 11.9879 0.100613 12.2715 0.24512C12.6939 0.460431 13.0388 0.804445 13.2549 1.22852C13.3993 1.512 13.4533 1.80653 13.4775 2.10254C13.5005 2.38318 13.5 2.72458 13.5 3.11914V10.3818C13.5 10.7763 13.5005 11.117 13.4775 11.3975C13.4533 11.6935 13.3993 11.988 13.2549 12.2715C13.039 12.6951 12.6943 13.0394 12.2715 13.2549C11.9879 13.3994 11.6926 13.4533 11.3965 13.4775C11.116 13.5005 10.7753 13.5 10.3809 13.5H6.86914C6.47457 13.5 6.13318 13.5005 5.85254 13.4775C5.55653 13.4533 5.262 13.3993 4.97852 13.2549C4.55456 13.0389 4.2105 12.6941 3.99512 12.2715C3.85059 11.9878 3.7967 11.6929 3.77246 11.3965C3.74951 11.1156 3.74999 10.7743 3.75 10.3789V10.3125C3.75 9.89829 4.08579 9.5625 4.5 9.5625C4.91421 9.5625 5.25 9.89829 5.25 10.3125V10.3496C5.25 10.782 5.25022 11.062 5.26758 11.2744C5.2842 11.4774 5.31313 11.5527 5.33203 11.5898C5.40422 11.7315 5.51885 11.8464 5.65918 11.918C5.69609 11.9368 5.7721 11.9658 5.97559 11.9824C6.1877 11.9997 6.46632 12 6.89746 12H10.3525C10.7839 12 11.0624 11.9997 11.2744 11.9824C11.4776 11.9658 11.5528 11.9368 11.5898 11.918C11.7312 11.846 11.8462 11.7313 11.918 11.5908C11.9368 11.5538 11.9658 11.4776 11.9824 11.2744C11.9997 11.0624 12 10.7838 12 10.3525V3.14746C12 2.71632 11.9997 2.4377 11.9824 2.22559C11.9658 2.0221 11.9368 1.94609 11.918 1.90918C11.8465 1.76901 11.7317 1.6543 11.5898 1.58203C11.5527 1.56311 11.4775 1.53421 11.2744 1.51758C11.0622 1.50023 10.7828 1.5 10.3506 1.5H6.90039C6.46798 1.5 6.18818 1.50022 5.97559 1.51758C5.77187 1.53424 5.6962 1.56317 5.65918 1.58203C5.51825 1.6539 5.4039 1.76825 5.33203 1.90918C5.31317 1.94621 5.28423 2.02188 5.26758 2.22559C5.25021 2.43818 5.25 2.71798 5.25 3.15039V3.18653C5.24996 3.6007 4.91419 3.93653 4.5 3.93653C4.08581 3.93653 3.75004 3.6007 3.75 3.18653V3.1211C3.74999 2.72579 3.74951 2.38448 3.77246 2.10352C3.79668 1.80711 3.8506 1.51223 3.99512 1.22852C4.21083 0.805153 4.55515 0.460835 4.97852 0.24512C5.26223 0.100599 5.55711 0.046685 5.85352 0.0224635C6.13447 -0.000484593 6.47578 -1.08744e-05 6.87109 2.53383e-06H10.3789ZM6.21973 3.96973C6.51262 3.67684 6.98738 3.67684 7.28027 3.96973L9.53027 6.21973C9.82317 6.51262 9.82317 6.98738 9.53027 7.28028L7.28027 9.53028C6.98738 9.82317 6.51262 9.82317 6.21973 9.53028C5.92684 9.23738 5.92683 8.76262 6.21973 8.46973L7.18945 7.5H0.75C0.335786 7.5 0 7.16422 0 6.75C2.15826e-06 6.33579 0.335788 6 0.75 6H7.18945L6.21973 5.03028C5.92684 4.73738 5.92683 4.26262 6.21973 3.96973Z" fill="currentColor"/>
    </Icon>
  )
}

export function SidebarChevronIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 12.2495 6.92363">
      <path d="M11.4506 0.79888L6.12475 6.12475L0.79888 0.79888" stroke="currentColor" strokeWidth="1.59776" strokeLinecap="round" strokeLinejoin="round"/>
    </Icon>
  )
}

export function DashboardMoneyBagIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 19.4286 19.4286">
      <g>
        <path d="M16.9536 13.6287C16.4223 10.432 14.7683 8.05163 13.3304 6.65348C12.912 6.24663 12.7028 6.0432 12.2406 5.85494C11.7785 5.66667 11.3813 5.66667 10.5868 5.66667H8.84178C8.04732 5.66667 7.65008 5.66667 7.18794 5.85494C6.7258 6.0432 6.51659 6.24663 6.09817 6.65348C4.66028 8.05163 3.00625 10.432 2.47493 13.6287C2.07961 16.007 4.27369 17.8095 6.72578 17.8095H12.7028C15.1549 17.8095 17.349 16.007 16.9536 13.6287Z" fill="currentColor"/>
        <path d="M5.87441 3.59661C5.70739 3.35352 5.46532 3.02356 5.96537 2.94833C6.47936 2.87098 7.01307 3.22283 7.53549 3.2156C8.00811 3.20906 8.24889 2.99944 8.5072 2.70015C8.7792 2.38499 9.2004 1.61905 9.71429 1.61905C10.2282 1.61905 10.6494 2.38499 10.9214 2.70015C11.1797 2.99944 11.4204 3.20906 11.893 3.2156C12.4155 3.22283 12.9492 2.87098 13.4632 2.94833C13.9632 3.02356 13.7212 3.35352 13.5542 3.59661L12.799 4.69576C12.476 5.16594 12.3145 5.40104 11.9764 5.53386C11.6384 5.66667 11.2016 5.66667 10.3281 5.66667H9.10051C8.22695 5.66667 7.79013 5.66667 7.45212 5.53386C7.11411 5.40104 6.9526 5.16594 6.62956 4.69576L5.87441 3.59661Z" fill="currentColor"/>
        <path d="M11.0296 10.4575C10.8545 9.81142 9.96374 9.2284 8.89444 9.66457C7.82513 10.1007 7.65528 11.504 9.27273 11.6531C10.0037 11.7204 10.4804 11.5749 10.9167 11.9867C11.3531 12.3984 11.4342 13.5436 10.3186 13.8522C9.20311 14.1607 8.09852 13.6786 7.97824 12.9938M9.58456 8.89844V9.514M9.58456 13.9471V14.5651" stroke="currentColor" strokeWidth="1.21429" strokeLinecap="round" strokeLinejoin="round"/>
      </g>
    </Icon>
  )
}

export function DashboardAnalyticsUpIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 19.4286 19.4286">
      <g>
        <path d="M2.02381 9.71429C2.02381 6.08896 2.02381 4.2763 3.15005 3.15005C4.2763 2.02381 6.08896 2.02381 9.71429 2.02381C13.3396 2.02381 15.1523 2.02381 16.2786 3.15005C17.4048 4.2763 17.4048 6.08896 17.4048 9.71429C17.4048 13.3396 17.4048 15.1523 16.2786 16.2786C15.1523 17.4048 13.3396 17.4048 9.71429 17.4048C6.08896 17.4048 4.2763 17.4048 3.15005 16.2786C2.02381 15.1523 2.02381 13.3396 2.02381 9.71429Z" fill="currentColor"/>
        <path d="M4.85082 9.29923C6.59542 9.35735 10.5514 9.09401 12.8016 5.52281M11.3271 5.09136L12.8454 4.847C13.0304 4.82343 13.3021 4.96953 13.3689 5.14368L13.7703 6.47004" stroke="currentColor" strokeWidth="1.21429" strokeLinecap="round" strokeLinejoin="round"/>
        <path d="M5.66797 14.5711C5.66797 13.9388 5.66797 13.5843 5.66797 12.952M9.71559 14.5711V12.1425M13.7632 14.5711V10.5234" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round"/>
      </g>
    </Icon>
  )
}

export function DashboardPieChartIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 19.4286 19.4286">
      <g>
        <path d="M8.92419 17.8095C12.4053 17.8095 15.3176 15.3746 16.0512 12.1151C16.2014 11.4475 16.2765 11.1136 16.0328 10.809C15.7891 10.5044 15.3947 10.5044 14.606 10.5044H8.92419M8.92419 17.8095C4.88967 17.8095 1.61905 14.5389 1.61905 10.5044C1.61905 7.0233 4.05393 4.11091 7.31349 3.3774C7.9811 3.22717 8.31494 3.15205 8.61957 3.39575C8.92419 3.63946 8.92419 4.03384 8.92419 4.82261V10.5044M8.92419 17.8095V10.5044Z" fill="currentColor"/>
        <path d="M17.4486 5.68809C16.7818 3.99571 15.4328 2.64676 13.7405 1.98005C12.8539 1.63077 12.4106 1.45612 11.8719 1.82283C11.3333 2.18953 11.3333 2.78932 11.3333 3.9889V5.63144C11.3333 6.79288 11.3333 7.3736 11.6941 7.73442C12.0549 8.09524 12.6357 8.09524 13.7971 8.09524H15.4396C16.6393 8.09524 17.2391 8.09524 17.6058 7.55664C17.9725 7.01804 17.7978 6.57472 17.4486 5.68809Z" fill="currentColor"/>
      </g>
    </Icon>
  )
}

export function DashboardShieldIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 19.4286 19.4286">
      <g>
        <path d="M15.1452 2.82956C13.6134 2.06738 11.7388 1.61905 9.71429 1.61905C7.68975 1.61905 5.81521 2.06738 4.28332 2.82956C3.5321 3.20333 3.15649 3.39022 2.79253 3.97782C2.42857 4.56543 2.42857 5.13439 2.42857 6.2723V9.0967C2.42857 13.6975 6.10572 16.2556 8.23529 17.3512C8.82923 17.6568 9.12617 17.8095 9.71429 17.8095C10.3024 17.8095 10.5993 17.6568 11.1932 17.3512C13.3228 16.2556 17 13.6975 17 9.0967V6.2723C17 5.1344 17 4.56544 16.636 3.97782C16.2721 3.39021 15.8965 3.20333 15.1452 2.82956Z" fill="currentColor"/>
        <path d="M12.1429 8.90476C12.1429 10.246 11.0556 11.3333 9.71429 11.3333C8.37299 11.3333 7.28571 10.246 7.28571 8.90476C7.28571 7.56349 8.37299 6.47619 9.71429 6.47619C11.0556 6.47619 12.1429 7.56349 12.1429 8.90476Z" stroke="currentColor" strokeWidth="1.21429" strokeLinecap="round" strokeLinejoin="round"/>
      </g>
    </Icon>
  )
}

export function DashboardArrowUpIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 384 512">
      <path
        d="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2 160 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-306.7L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function DashboardArrowUpRightIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 16.7314 16.7314">
      <g>
        <path d="M6.27429 4.63622C6.27429 4.63622 11.1113 4.25786 11.7924 4.939C12.4736 5.62014 12.0951 10.4571 12.0951 10.4571M11.5029 5.22857L4.53143 12.2" stroke="currentColor" strokeWidth="1.04571" strokeLinecap="round" strokeLinejoin="round"/>
      </g>
    </Icon>
  )
}

export function Dashboard3dScaleIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 20 20">
      <path
        d="m9.714 10.524 4.5 3.913m-4.5-3.913-4.047 3.643m4.047-3.643V5.937"
        stroke="currentColor"
        strokeWidth="1.214"
      />
      <path
        d="M14.727 13.313c.418-.24.627-.36.856-.36.23 0 .439.12.857.36l.513.295c.418.24.627.36.742.558s.114.439.114.92v.59c0 .48 0 .72-.114.919-.115.198-.324.318-.742.559l-.513.295c-.418.24-.627.36-.857.36s-.438-.12-.857-.36l-.512-.295c-.418-.24-.627-.36-.742-.559-.115-.198-.115-.439-.115-.92v-.589c0-.481 0-.722.115-.92s.324-.318.742-.558zm-11.739 0c.419-.24.628-.36.857-.36.23 0 .439.12.857.36l.513.295c.418.24.627.36.742.558s.114.439.114.92v.59c0 .48 0 .72-.114.919-.115.198-.324.318-.742.559l-.513.295c-.418.24-.627.36-.857.36s-.438-.12-.857-.36l-.512-.295c-.418-.24-.627-.36-.742-.559-.115-.198-.115-.439-.115-.92v-.589c0-.481 0-.722.115-.92s.324-.318.742-.558zM8.857 1.98c.419-.24.628-.36.857-.36.23 0 .439.12.857.36l.513.295c.418.24.627.36.742.558s.114.439.114.92v.59c0 .48 0 .72-.114.919-.115.198-.324.318-.742.559l-.513.295c-.418.24-.627.36-.857.36s-.438-.12-.857-.36l-.512-.295c-.418-.24-.627-.36-.742-.559-.115-.198-.115-.439-.115-.92v-.589c0-.481 0-.722.115-.92s.324-.318.742-.558z"
        fill="currentColor"
      />
    </Icon>
  )
}

export function DashboardTaxesIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 20 20">
      <path
        d="M3.715 8.156v5h4v-5zm8.428-.87v2.428h3.238V7.286z"
        fill="currentColor"
        stroke="currentColor"
        strokeWidth="1.214"
        strokeLinecap="round"
        strokeLinejoin="round"
      />
      <path
        d="M16.899 17.607h-.101m-4.352-4.452h-.1M17 12.952l-4.857 4.857M17 17.607a.202.202 0 1 1-.405 0 .202.202 0 0 1 .405 0m-4.452-4.452a.202.202 0 1 1-.405 0 .202.202 0 0 1 .405 0"
        stroke="currentColor"
        strokeWidth="1.214"
        strokeLinecap="round"
        strokeLinejoin="round"
      />
      <path
        d="M17.285 7.286H2.144a.532.532 0 0 1-.286-.976l5.21-3.424c1.284-.845 1.926-1.267 2.646-1.267s1.363.422 2.647 1.267l5.21 3.424a.532.532 0 0 1-.286.976"
        fill="currentColor"
      />
      <path
        d="M8.905 17.81H2.953c-.809 0-1.213 0-1.314-.25s.185-.544.757-1.133l.557-.572c.228-.234.342-.35.486-.412.145-.062.306-.062.628-.062h4.838z"
        fill="currentColor"
        stroke="currentColor"
        strokeWidth="1.214"
        strokeLinecap="round"
        strokeLinejoin="round"
      />
      <path
        d="M9.815 4.655h-.1m.202 0a.202.202 0 1 1-.405 0 .202.202 0 0 1 .405 0"
        stroke="currentColor"
        strokeWidth="1.214"
        strokeLinecap="round"
        strokeLinejoin="round"
      />
    </Icon>
  )
}

export function DashboardReloadHorizontalIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 20 20">
      <path
        d="M16.595 4.452H7.69c-3.006 0-5.261 2.174-5.261 5.262m.404 5.262h8.905c3.006 0 5.262-2.173 5.262-5.262"
        stroke="currentColor"
        strokeWidth="1.214"
        strokeLinecap="round"
        strokeLinejoin="round"
      />
      <path
        d="M14.976 2.429S17 3.919 17 4.453c0 .533-2.024 2.023-2.024 2.023M4.452 12.952s-2.023 1.49-2.023 2.024c0 .533 2.023 2.024 2.023 2.024"
        stroke="currentColor"
        strokeWidth="1.214"
        strokeLinecap="round"
        strokeLinejoin="round"
      />
    </Icon>
  )
}

export function TopbarCalendarIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 15.4773 16.2273">
      <path
        d="M12.2386 0.613636V2.11364M3.23864 0.613636V2.11364M7.73564 8.86364H7.74164M7.73564 11.8636H7.74164M10.7319 8.86364H10.7386M4.73864 8.86364H4.74539M4.73864 11.8636H4.74539M1.36364 5.11364H14.1136M0.988637 5.11364H14.4886M0.613637 8.29589C0.613637 5.02814 0.613637 3.39389 1.55264 2.37839C2.49164 1.36364 4.00364 1.36364 7.02614 1.36364H8.45114C11.4736 1.36364 12.9856 1.36364 13.9246 2.37914C14.8636 3.39389 14.8636 5.02814 14.8636 8.29664V8.68139C14.8636 11.9491 14.8636 13.5834 13.9246 14.5989C12.9856 15.6136 11.4736 15.6136 8.45114 15.6136H7.02614C4.00364 15.6136 2.49164 15.6136 1.55264 14.5981C0.613637 13.5834 0.613637 11.9491 0.613637 8.68064V8.29589Z"
        stroke="currentColor"
        strokeWidth="1.22727"
        strokeLinecap="round"
        strokeLinejoin="round"
      />
    </Icon>
  )
}

export function TopbarChevronIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 10.2273 5.72727">
      <path
        d="M9.61364 5.11364L5.11364 0.613636L0.613636 5.11364"
        stroke="currentColor"
        strokeWidth="1.22727"
        strokeLinecap="round"
        strokeLinejoin="round"
      />
    </Icon>
  )
}

export function TopbarExportIcon({ className, ...props }: IconProps) {
  return (
    <Icon className={className} {...props} viewBox="0 0 12.8939 12.8939">
      <path
        d="M6.44697 8.94697V0.613636M6.44697 8.94697C5.86364 8.94697 4.77364 7.2853 4.36364 6.86364M6.44697 8.94697C7.0303 8.94697 8.1203 7.2853 8.5303 6.86364M0.613636 12.2803H12.2803"
        stroke="currentColor"
        strokeWidth="1.22727"
        strokeLinecap="round"
        strokeLinejoin="round"
      />
    </Icon>
  )
}
```

### `src/components/dashboards/capitalio-dashboard/components/capitalio/logo.tsx`

```tsx
import type { SVGProps } from 'react'
import { cn } from '@/lib/utils'

export function CapitalioLogo({ className, ...props }: SVGProps<SVGSVGElement>) {
  return (
    <svg
      viewBox="0 0 200 200"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      className={cn('size-8', className)}
      {...props}
    >
      <path
        d="M200 100c0-7.43-6.59-14-8.17-21-1.63-7.18 1.41-16-1.71-22.44s-12-9.66-16.49-15.32-5.63-14.89-11.28-19.43-14.9-3.51-21.48-6.68-11.44-11-18.61-12.64c-7-1.58-14.83 3.34-22.26 3.34S84.69.91 77.74 2.49C70.57 4.12 65.61 12 59.13 15.13S43.3 17.3 37.65 21.81 30.9 35.6 26.37 41.28 13.06 50 9.88 56.6 9.8 71.86 8.17 79C6.59 86 0 92.57 0 100s6.59 14 8.17 21c1.63 7.18-1.41 16 1.71 22.44s12 9.66 16.49 15.32 5.6 14.93 11.28 19.47 14.9 3.51 21.48 6.68 11.44 11 18.61 12.64c7 1.58 14.83-3.34 22.26-3.34s15.31 4.92 22.26 3.34c7.17-1.63 12.13-9.52 18.61-12.64s15.83-2.17 21.48-6.68 6.75-13.79 11.28-19.47 13.31-8.74 16.49-15.32.08-15.26 1.71-22.44c1.58-7 8.17-13.57 8.17-21m-100 69a69 69 0 0 1-67.674-82.461A69 69 0 0 1 169 100a69.073 69.073 0 0 1-69 69"
        fill="currentColor"
      />
      <path
        d="M153.96 81.633a57.002 57.002 0 0 0-98.102-17.696 57 57 0 1 0 98.936 51.767l-29.47-8.446a26.34 26.34 0 0 1-28.669 18.873 26.35 26.35 0 0 1-22.991-25.486 26.343 26.343 0 0 1 51.275-9.134z"
        fill="currentColor"
      />
    </svg>
  )
}
```

### `src/components/dashboards/capitalio-dashboard/components/capitalio/navigation.tsx`

```tsx
import {
  createContext,
  useContext,
  useMemo,
  useState,
  type AnchorHTMLAttributes,
  type MouseEvent,
  type ReactNode,
} from 'react'
import { defaultDashboardPeriod, type PeriodValue } from '../../data'

type DashboardNavigation = {
  pathname: string
  navigate: (pathname: string) => void
  period: PeriodValue
  setPeriod: (period: PeriodValue) => void
}

const DashboardNavigationContext = createContext<DashboardNavigation | null>(
  null,
)

export function DashboardNavigationProvider({
  children,
}: {
  children: ReactNode
}) {
  const [pathname, setPathname] = useState('/')
  const [period, setPeriod] = useState<PeriodValue>(defaultDashboardPeriod)
  const value = useMemo(
    () => ({ pathname, navigate: setPathname, period, setPeriod }),
    [pathname, period],
  )

  return (
    <DashboardNavigationContext.Provider value={value}>
      {children}
    </DashboardNavigationContext.Provider>
  )
}

export function useDashboardNavigation() {
  const context = useContext(DashboardNavigationContext)

  if (!context) {
    throw new Error(
      'useDashboardNavigation must be used within DashboardNavigationProvider',
    )
  }

  return context
}

export function DashboardLink({
  href,
  onClick,
  ...props
}: AnchorHTMLAttributes<HTMLAnchorElement> & { href: string }) {
  const { navigate } = useDashboardNavigation()

  function handleClick(event: MouseEvent<HTMLAnchorElement>) {
    onClick?.(event)

    if (
      event.defaultPrevented ||
      event.button !== 0 ||
      event.metaKey ||
      event.ctrlKey ||
      event.shiftKey ||
      event.altKey
    ) {
      return
    }

    event.preventDefault()
    navigate(href)
  }

  return <a href={href} onClick={handleClick} {...props} />
}
```

### `src/components/dashboards/capitalio-dashboard/components/capitalio/shared.tsx`

```tsx
import { dashboardPeriods, defaultDashboardPeriod } from '../../data'
import { cn } from '@/lib/utils'
import { useDashboardNavigation } from './navigation'

type DashboardTooltipPayload = {
  name?: string
  value?: number | string
  color?: string
  dataKey?: string | number
  payload?: {
    name?: string
    fill?: string
  }
}

type DashboardChartTooltipProps = {
  active?: boolean
  label?: string | number
  payload?: readonly DashboardTooltipPayload[]
  names?: Record<string, string>
  colors?: Record<string, string>
  valueFormatter?: (value: number | string, dataKey: string) => React.ReactNode
}

export function useDashboardPeriod() {
  const { period } = useDashboardNavigation()

  return dashboardPeriods.some((periodOption) => periodOption.value === period)
    ? period
    : defaultDashboardPeriod
}

export function toneColor(tone: 'positive' | 'negative' | 'neutral') {
  if (tone === 'positive') {
    return 'var(--chart-4)'
  }

  if (tone === 'negative') {
    return 'var(--destructive)'
  }

  return 'var(--foreground)'
}

export function DashboardCard({
  children,
  className,
}: {
  children: React.ReactNode
  className?: string
}) {
  return (
    <article
      className={cn(
        'shadow-custom min-w-0 rounded-lg border border-border bg-card p-4 text-card-foreground',
        className,
      )}
    >
      {children}
    </article>
  )
}

export function DetailHeader({
  title,
  subtitle,
  children,
}: {
  title: string
  subtitle?: string
  children?: React.ReactNode
}) {
  return (
    <div className="flex min-w-0 flex-wrap items-start justify-between gap-3">
      <div className="min-w-0 flex-1">
        <h2 className="truncate text-lg font-medium leading-6">{title}</h2>
        {subtitle ? (
          <div className="mt-1 truncate text-sm leading-none text-muted-foreground">{subtitle}</div>
        ) : null}
      </div>
      {children ? <div className="flex min-w-0 flex-wrap items-center justify-end gap-2">{children}</div> : null}
    </div>
  )
}

export function DetailTag({
  children,
  color = 'var(--chart-1)',
}: {
  children: React.ReactNode
  color?: string
}) {
  return (
    <span
      className="rounded-lg px-3 py-1 text-sm leading-5"
      style={{
        color,
        backgroundColor: `color-mix(in oklab, ${color} 10%, transparent)`,
      }}
    >
      {children}
    </span>
  )
}

export function DashboardChartTooltip({
  active,
  label,
  payload,
  names,
  colors,
  valueFormatter,
}: DashboardChartTooltipProps) {
  const items = payload?.filter((item) => item.value !== undefined && item.value !== null) ?? []

  if (!active || items.length === 0) {
    return null
  }

  const header = items[0]?.payload?.name ?? label

  return (
    <div className="rounded-lg border border-border bg-popover p-3 text-xs text-popover-foreground shadow-custom">
      <div className="mb-2 text-xs font-medium text-muted-foreground">{header}</div>
      <div className="space-y-2">
        {items.map((item) => {
          const dataKey = String(item.dataKey ?? item.name ?? '')
          const color = colors?.[dataKey] ?? item.color ?? item.payload?.fill ?? 'var(--foreground)'
          const name = names?.[dataKey] ?? item.name ?? dataKey
          const value = valueFormatter ? valueFormatter(item.value ?? '', dataKey) : item.value

          return (
            <div key={dataKey} className="grid grid-cols-[1fr_auto] items-center gap-4 leading-none">
              <div className="flex min-w-0 items-center gap-2">
                <span className="size-3 shrink-0 rounded-xs" style={{ backgroundColor: color }} />
                <span className="truncate text-xs">{name}</span>
              </div>
              <span className="text-right font-medium text-xs">{value}</span>
            </div>
          )
        })}
      </div>
    </div>
  )
}

export function ChartMarker({ color, className }: { color: string; className?: string }) {
  return (
    <span
      className={cn('size-3 shrink-0 rounded-xs', className)}
      style={{ backgroundColor: color }}
    />
  )
}
```

### `src/components/dashboards/capitalio-dashboard/components/capitalio/sidebar.tsx`

```tsx
import { Collapsible } from '@base-ui/react/collapsible'
import {
  SidebarChevronIcon,
  SidebarLogoutIcon,
} from './icons'
import { CapitalioLogo } from './logo'
import { DashboardLink, useDashboardNavigation } from './navigation'
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'
import {
  Sidebar,
  SidebarContent,
  SidebarFooter,
  SidebarGroup,
  SidebarGroupContent,
  SidebarGroupLabel,
  SidebarHeader,
  SidebarMenu,
  SidebarMenuButton,
  SidebarMenuItem,
  useSidebar,
} from '@/components/ui/sidebar'
import { Button } from '@/components/ui/button'
import { currentUser, sidebarSections, type NavigationItem, type NavigationSection } from '../../data'
import { cn } from '@/lib/utils'

function Brand() {
  return (
    <div className="flex min-w-0 flex-1 items-center gap-3">
      <div className="size-10 flex shrink-0 items-center justify-center rounded-lg border border-primary bg-linear-to-t from-[color-mix(in_oklab,var(--primary)_80%,black)] to-primary">
        <CapitalioLogo className="size-6 shrink-0 text-white" />
      </div>
      <span className="truncate text-lg font-medium text-sidebar-accent-foreground">
        Capitalio
      </span>
    </div>
  )
}

function NavLinkButton({
  item,
}: {
  item: NavigationItem
}) {
  const { pathname } = useDashboardNavigation()
  const { isMobile, setOpenMobile } = useSidebar()
  const isActive =
    item.href === '/' ? pathname === '/' : pathname.startsWith(item.href)
  const Icon = item.icon

  function handleClick() {
    if (isMobile) setOpenMobile(false)
  }

  return (
    <SidebarMenuItem>
      <SidebarMenuButton
        asChild
        tooltip={item.name}
        isActive={isActive}
        className={cn(
          'h-auto gap-2 rounded-lg px-3 py-3 text-base leading-5 text-muted-foreground transition-colors',
          'bg-transparent hover:bg-transparent active:bg-transparent data-active:bg-transparent!',
          'data-active:text-sidebar-accent-foreground',
          '[&_img]:size-5!',
          isActive && 'active-sidebar-item',
        )}
      >
        <DashboardLink href={item.href} onClick={handleClick} aria-current={isActive ? 'page' : undefined}>
          <Icon />
          <span className="truncate">{item.name}</span>
        </DashboardLink>
      </SidebarMenuButton>
    </SidebarMenuItem>
  )
}

function SidebarSectionMenu({ items }: { items: NavigationItem[] }) {
  return (
    <SidebarGroupContent>
      <SidebarMenu className="gap-2">
        {items.map((item) => (
          <NavLinkButton key={item.name} item={item} />
        ))}
      </SidebarMenu>
    </SidebarGroupContent>
  )
}

function SidebarNavSection({ section }: { section: NavigationSection }) {
  if (section.collapsible) {
    return (
      <Collapsible.Root defaultOpen={section.defaultOpen ?? true}>
        <SidebarGroup className="gap-2 p-0">
          {section.label ? (
            <Collapsible.Trigger
              className="flex w-full cursor-pointer items-center justify-between px-2 py-3 font-section text-base font-normal tracking-tight text-muted-foreground/70 transition-colors hover:text-muted-foreground [&>svg]:size-2.5! [&>svg]:transition-transform [&>svg]:duration-200 [&>svg]:ease-out data-panel-open:[&>svg]:rotate-180"
            >
              {section.label}
              <SidebarChevronIcon className="shrink-0" />
            </Collapsible.Trigger>
          ) : null}
          <Collapsible.Panel>
            <SidebarSectionMenu items={section.items} />
          </Collapsible.Panel>
        </SidebarGroup>
      </Collapsible.Root>
    )
  }

  return (
    <SidebarGroup className="gap-2 p-0">
      {section.label ? (
        <SidebarGroupLabel className="px-2 py-3 font-section text-base font-normal tracking-tight text-muted-foreground/70">
          {section.label}
        </SidebarGroupLabel>
      ) : null}
      <SidebarSectionMenu items={section.items} />
    </SidebarGroup>
  )
}

export function DashboardSidebar() {
  return (
    <Sidebar
      className="border-none! p-0.5 capitalio-dashboard"
    >
      <SidebarHeader className="mb-6 flex-row items-start gap-2 px-4 pt-6 pb-0">
        <Brand />
      </SidebarHeader>

      <SidebarContent className="gap-3 px-4 pb-4">
        {sidebarSections.main.map((section) => (
          <SidebarNavSection key={section.label} section={section} />
        ))}
      </SidebarContent>

      <SidebarFooter className="gap-3 px-4 pt-0 pb-5">
        <SidebarMenu className="gap-2">
          {sidebarSections.footer.items.map((item) => (
            <NavLinkButton key={item.name} item={item} />
          ))}
        </SidebarMenu>
        <div className="border-t" />
        <div className="flex min-w-0 items-center gap-3">
          <Avatar className="size-10 rounded-lg after:rounded-lg">
            <AvatarImage
              src={currentUser.avatar}
              className="rounded-lg"
            />
            <AvatarFallback className="rounded-lg">
              {currentUser.initials}
            </AvatarFallback>
          </Avatar>
          <div className="flex min-w-0 flex-1 flex-col gap-1">
            <span className="truncate text-base leading-none font-medium text-sidebar-accent-foreground">
              {currentUser.name}
            </span>
            <span className="premium-badge">Premium</span>
          </div>

          <Button
            size="icon"
            variant="destructive"
            className="bg-transparent! group"
          >
            <SidebarLogoutIcon className="size-4 opacity-70 group-hover:opacity-100 transition-colors" />
          </Button>
        </div>
      </SidebarFooter>
    </Sidebar>
  )
}
```

### `src/components/dashboards/capitalio-dashboard/components/capitalio/topbar.tsx`

```tsx
import {
  TopbarCalendarIcon,
  TopbarChevronIcon,
  TopbarExportIcon,
} from './icons'
import { useDashboardNavigation } from './navigation'
import { Button } from '@/components/ui/button'
import {
  DropdownMenu,
  DropdownMenuContent,
  DropdownMenuItem,
  DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu'
import { SidebarTrigger } from '@/components/ui/sidebar'
import {
  dashboardPeriods,
  dashboardTopbarData,
  defaultDashboardPeriod,
  getPageTitle,
  type PeriodValue,
} from '../../data'

function isPeriodValue(value: string | null): value is PeriodValue {
  return dashboardPeriods.some((periodOption) => periodOption.value === value)
}

export function DashboardTopbar() {
  const { pathname, period, setPeriod } = useDashboardNavigation()
  const title = getPageTitle(pathname)
  const selectedPeriodValue = isPeriodValue(period) ? period : defaultDashboardPeriod

  const selectedPeriod =
    dashboardPeriods.find((periodOption) => periodOption.value === selectedPeriodValue) ??
    dashboardPeriods[0]

  function handlePeriodChange(nextPeriod: PeriodValue) {
    setPeriod(nextPeriod)
  }

  return (
    <header className="flex shrink-0 flex-col gap-3 px-4 py-3 md:flex-row md:items-center md:justify-between md:px-8">
      <div className="flex min-w-0 items-center gap-3">
        <SidebarTrigger className="size-8.5 shrink-0 md:hidden [&_svg]:size-5!" />

        <div className="flex min-w-0 flex-1 items-center justify-between gap-3 md:flex-col md:items-start md:justify-center md:gap-1.5">
          <h1 className="truncate font-section text-lg leading-none font-semibold text-foreground md:text-xl">
            {title}
          </h1>
          <div className="flex shrink-0 items-center gap-1.5 font-section text-xs text-foreground md:gap-2 md:text-sm">
            <span className="whitespace-nowrap">
              <span className="hidden text-muted-foreground md:inline">
                Last updates{' '}
              </span>
              {dashboardTopbarData.lastUpdated}
            </span>
            <span className="size-2 shrink-0 rounded-full bg-muted-foreground/50" />
            <span className="shrink-0 font-medium">
              <span className="hidden font-normal text-muted-foreground md:inline">
                All values in{' '}
              </span>
              {dashboardTopbarData.currency}
            </span>
          </div>
        </div>
      </div>

      <div className="grid min-w-0 gap-2 sm:flex sm:items-center md:shrink-0">
        <div className="flex min-w-0 items-center">
          <div className="flex h-9 min-w-0 flex-1 items-center gap-2 rounded-l-md border border-r-0 border-border bg-background px-2.5 text-sm text-muted-foreground shadow-xs dark:border-input dark:bg-input/30 md:px-3">
            <TopbarCalendarIcon className="size-4 shrink-0" />
            <span className="truncate">{dashboardTopbarData.dateRange}</span>
          </div>

          <DropdownMenu>
            <DropdownMenuTrigger asChild>
              <Button
                type="button"
                variant="outline"
                className="h-9 shrink-0 gap-2 rounded-l-none bg-card px-2.5 font-normal text-muted-foreground hover:bg-card hover:text-foreground md:px-3"
              >
                <span>{selectedPeriod.label}</span>
                <TopbarChevronIcon className="h-auto w-3 rotate-180" />
              </Button>
            </DropdownMenuTrigger>
            <DropdownMenuContent align="end">
              {dashboardPeriods.map((periodOption) => (
                <DropdownMenuItem
                  key={periodOption.value}
                  onClick={() => handlePeriodChange(periodOption.value)}
                >
                  {periodOption.label}
                </DropdownMenuItem>
              ))}
            </DropdownMenuContent>
          </DropdownMenu>
        </div>

        <Button className="sm:shrink-0">
          <span>Export</span>
          <TopbarExportIcon className="size-3 rotate-180" />
        </Button>
      </div>
    </header>
  )
}
```

### `src/components/dashboards/capitalio-dashboard/dashboard-layout.tsx`

```tsx
import type { CSSProperties, ReactNode } from 'react'
import { DashboardSidebar } from './components/capitalio/sidebar'
import { DashboardTopbar } from './components/capitalio/topbar'
import { SidebarProvider } from '@/components/ui/sidebar'
import './dashboard.css'

type DashboardLayoutProps = {
  children: ReactNode
}

export default function DashboardLayout({ children }: DashboardLayoutProps) {
  return (
    <SidebarProvider
      defaultOpen
      className="capitalio-dashboard h-svh overflow-hidden no-scrollbar"
      style={
        {
          '--sidebar-width': '15.625rem',
        } as CSSProperties
      }
    >
      <DashboardSidebar />

      <main className="flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden p-0.5 pl-0">
        <div className="flex min-h-0 min-w-0 flex-1 flex-col bg-background shadow-custom">
          <DashboardTopbar />
          <div className="min-h-0 flex-1 overflow-y-auto">{children}</div>
        </div>
      </main>
    </SidebarProvider>
  )
}
```

### `src/components/dashboards/capitalio-dashboard/dashboard.css`

```css
.capitalio-dashboard,
body:has(.capitalio-dashboard) [data-slot="sidebar"][data-mobile="true"] {
  --radius: 0.5rem;
  --background: #ffffff;
  --foreground: oklch(0.145 0 0);
  --card: #ffffff;
  --card-foreground: oklch(0.145 0 0);
  --card-hover: oklch(0.97 0 0);
  --popover: #ffffff;
  --popover-foreground: oklch(0.145 0 0);
  --primary: oklch(0.613082 0.211962 256.3304);
  --primary-foreground: #ffffff;
  --secondary: oklch(0.97 0 0);
  --secondary-foreground: oklch(0.205 0 0);
  --muted: oklch(0.97 0 0);
  --muted-foreground: oklch(0.556 0 0);
  --accent: oklch(0.97 0 0);
  --accent-foreground: oklch(0.205 0 0);
  --destructive: oklch(0.574 0.232 29.36);
  --border: oklch(0.922 0 0);
  --input: oklch(0.922 0 0);
  --input-addon-foreground: oklch(0.556 0 0);
  --ring: var(--primary);
  --chart-1: var(--primary);
  --chart-2: #7466F6;
  --chart-3: #FF7A00;
  --chart-4: #00DA92;
  --chart-5: #E10B05;
  --dashboard-icon-bg: conic-gradient(from 90deg, #5e5959 0%, #413f3f 6.25%, #242424 12.5%, #1d1b1b 28.481%, #2c2a2a 31.034%, #3b3838 33.588%, #585656 38.694%, #3e3c3c 46.951%, #242222 55.208%, #353232 62.885%, #464242 70.562%, #353333 76.351%, #242424 82.14%, #413f3f 91.07%, #5e5959 100%);
  --dashboard-icon-shadow: 1px 1px 0 rgb(0 0 0 / 25%);
  --sidebar: #ffffff;
  --sidebar-foreground: oklch(0.32 0 0);
  --sidebar-primary: var(--primary);
  --sidebar-primary-foreground: #ffffff;
  --sidebar-accent: oklch(0.95 0 0);
  --sidebar-accent-foreground: var(--foreground);
  --sidebar-border: oklch(0.9 0 0);
  --sidebar-ring: var(--primary);
  --sidebar-muted: oklch(0.556 0 0);
  --sidebar-muted-foreground: oklch(0.6068 0 0);
  --sidebar-badge: oklch(0.93 0 0);
  --sidebar-divider: rgb(0 0 0 / 10%);
  --sidebar-active-shadow: inset 0 0 4px 2px rgb(0 0 0 / 3%), 0 0 5px rgb(0 0 0 / 10%);
  --premium-from: #efe189;
  --premium-mid: #ebc745;
  --premium-to: #e7ad00;
  --premium-foreground: #5a3300;
}

.capitalio-dashboard.dark,
.dark .capitalio-dashboard,
.dark body:has(.capitalio-dashboard) [data-slot="sidebar"][data-mobile="true"] {
  --background: #151517;
  --foreground: #ffffff;
  --card: #151517;
  --card-foreground: #ffffff;
  --card-hover: #202020;
  --popover: #151517;
  --popover-foreground: #ffffff;
  --primary-foreground: #ffffff;
  --secondary: #202020;
  --secondary-foreground: #ffffff;
  --muted: #202020;
  --muted-foreground: #9e9e9e;
  --accent: #202020;
  --accent-foreground: #ffffff;
  --destructive: oklch(0.574 0.232 29.36);
  --border: #000000;
  --input: #202020;
  --input-addon-foreground: #9e9e9e;
  --ring: var(--primary);
  --chart-1: var(--primary);
  --chart-2: #7466F6;
  --chart-3: #FF7A00;
  --chart-4: #00DA92;
  --chart-5: #E10B05;
  --dashboard-icon-bg: conic-gradient(from 90deg, #5e5959 0%, #413f3f 6.25%, #242424 12.5%, #1d1b1b 28.481%, #2c2a2a 31.034%, #3b3838 33.588%, #585656 38.694%, #3e3c3c 46.951%, #242222 55.208%, #353232 62.885%, #464242 70.562%, #353333 76.351%, #242424 82.14%, #413f3f 91.07%, #5e5959 100%);
  --dashboard-icon-shadow: 1px 1px 0 rgb(0 0 0 / 25%);
  --sidebar: #151517;
  --sidebar-foreground: #b3b3b3;
  --sidebar-primary: var(--primary);
  --sidebar-primary-foreground: #ffffff;
  --sidebar-accent: #202020;
  --sidebar-accent-foreground: var(--foreground);
  --sidebar-border: #202020;
  --sidebar-ring: var(--primary);
  --sidebar-muted: #9e9e9e;
  --sidebar-muted-foreground: oklch(0.7668 0 0);
  --sidebar-badge: #202020;
  --sidebar-divider: rgb(255 255 255 / 10%);
  --sidebar-active-shadow: inset 0 0 4px 2px rgb(255 255 255 / 3%), 0 0 5px rgb(0 0 0 / 60%);
  --premium-from: #efe189;
  --premium-mid: #ebc745;
  --premium-to: #e7ad00;
  --premium-foreground: #5a3300;
}

/* custom classes */
.shadow-custom {
  box-shadow: inset 4px 0 4px 0 rgb(0 0 0 / 1%);
}

.dark .shadow-custom,
.shadow-custom.dark {
  box-shadow: inset 4px 0 4px 0 rgb(255 255 255 / 3%);
}

.active-sidebar-item {
  position: relative;
  box-shadow:
    0 0 5px 0 rgb(0 0 0 / 10%),
    inset 0 0 4px 2px rgb(0 0 0 / 3%);
}

.active-sidebar-item::before {
  position: absolute;
  inset: 0;
  padding: 0.5px;
  border-radius: inherit;
  background: linear-gradient(90deg, #f4f4f4 0%, #e3e3e3 50%, #ececec 100%);
  content: "";
  pointer-events: none;
  -webkit-mask:
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
}

.dark .active-sidebar-item,
.active-sidebar-item.dark {
  box-shadow:
    0 0 5px 0 rgb(0 0 0 / 60%),
    inset 0 0 4px 2px rgb(255 255 255 / 3%);
}

.dark .active-sidebar-item::before,
.active-sidebar-item.dark::before {
  background: linear-gradient(90deg, #202020 0%, #353232 50%, #000000 100%);
}

.no-scrollbar,
.no-scrollbar * {
  -ms-overflow-style: none;
  scrollbar-width: none;
}

.no-scrollbar::-webkit-scrollbar,
.no-scrollbar *::-webkit-scrollbar {
  display: none;
}

.custom-scrollbar-x {
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: thin;
  scrollbar-color: var(--border) transparent;
}

.custom-scrollbar-x::-webkit-scrollbar {
  height: 0.375rem;
}

.custom-scrollbar-x::-webkit-scrollbar-track {
  background: transparent;
}

.custom-scrollbar-x::-webkit-scrollbar-thumb {
  background-color: var(--border);
  border-radius: 9999px;
}

.custom-scrollbar-x::-webkit-scrollbar-thumb:hover {
  background-color: var(--muted-foreground);
}

[data-slot="dropdown-menu-content"] [data-slot="dropdown-menu-item"],
[data-slot="dropdown-menu-content"] [data-slot="dropdown-menu-sub-trigger"] {
  padding-inline: 0.625rem;
  padding-block: 0.625rem;
}

[data-slot="dropdown-menu-content"] [data-slot="dropdown-menu-checkbox-item"],
[data-slot="dropdown-menu-content"] [data-slot="dropdown-menu-radio-item"] {
  padding-block: 0.625rem;
  padding-left: 0.625rem;
  padding-right: 2rem;
}

.capitalio-dashboard .premium-badge {
  display: inline-block;
  align-self: flex-start;
  width: fit-content;
  padding: 0.25rem 0.5rem;
  border-radius: 9999px;
  font-size: 0.5rem;
  line-height: 1;
  background: linear-gradient(90deg, #efe189 0%, #ebc745 50%, #e7ad00 100%);
  color: #5a3300;
}

.capitalio-dashboard .dashboard-icon-badge {
  background-image: var(--dashboard-icon-bg);
  box-shadow: var(--dashboard-icon-shadow);
}

.capitalio-dashboard .dashboard-dot-grid {
  background-image: radial-gradient(
    circle,
    color-mix(in oklab, var(--foreground) 12%, transparent) 0.0625rem,
    transparent 0.0625rem
  );
  background-size: 1.5rem 1.5rem;
}

.capitalio-dashboard .dashboard-progress-fill {
  transform-origin: left;
  animation: dashboard-progress-grow 700ms ease-out both;
}

@keyframes dashboard-progress-grow {
  from {
    transform: scaleX(0);
  }

  to {
    transform: scaleX(1);
  }
}
```

### `src/components/dashboards/capitalio-dashboard/data.ts`

```ts
import type { ComponentType, SVGProps } from 'react'
import {
  SidebarAnalyticsIcon,
  SidebarFixedIncomeIcon,
  SidebarFolderIcon,
  SidebarHomeMutedIcon,
  SidebarLinkIcon,
  SidebarNetWorthIcon,
  SidebarNotificationsIcon,
  SidebarRealEstateIcon,
  SidebarSettingsIcon,
} from './components/capitalio/icons'

export type NavIcon = ComponentType<SVGProps<SVGSVGElement>>

export type NavigationItem = {
  name: string
  href: string
  icon: NavIcon
  pageTitle?: string
}

export type NavigationSection = {
  label?: string
  collapsible?: boolean
  defaultOpen?: boolean
  items: NavigationItem[]
}

export const sidebarSections = {
  main: [
    {
      label: 'Overview',
      collapsible: false,
      items: [
        {
          name: 'Dashboard',
          href: '/',
          icon: SidebarHomeMutedIcon,
          pageTitle: 'Overview',
        },
        { name: 'Analytics', href: '/analytics', icon: SidebarAnalyticsIcon },
        { name: 'Net Worth', href: '/net-worth', icon: SidebarNetWorthIcon },
      ],
    },
    {
      label: 'Operations',
      collapsible: true,
      defaultOpen: true,
      items: [
        { name: 'Stocks', href: '/stocks', icon: SidebarFolderIcon },
        { name: 'Crypto', href: '/crypto', icon: SidebarLinkIcon },
        { name: 'Real Estate', href: '/real-estate', icon: SidebarRealEstateIcon },
        { name: 'Fixed Income', href: '/fixed-income', icon: SidebarFixedIncomeIcon },
      ],
    },
  ],
  footer: {
    items: [
      { name: 'Settings', href: '/settings', icon: SidebarSettingsIcon },
      {
        name: 'Notifications',
        href: '/notifications',
        icon: SidebarNotificationsIcon,
      },
    ],
  },
} satisfies {
  main: NavigationSection[]
  footer: NavigationSection
}

const navigationItems: NavigationItem[] = [
  ...sidebarSections.main.flatMap((section) => section.items),
  ...sidebarSections.footer.items,
]

export function getPageTitle(pathname: string) {
  const item = navigationItems.find((navItem) => navItem.href === pathname)

  return item?.pageTitle ?? item?.name ?? 'Overview'
}

export const currentUser = {
  name: 'Vansh Patel',
  email: 'vansh@capitalio.com',
  initials: 'VP',
  avatar: `https://api.dicebear.com/10.x/glyphs/svg?seed=${encodeURIComponent('Vansh Patel')}`,
}

export const notifications = [
  {
    id: 'template-ready',
    title: 'Template ready',
    description: 'Dashboard shell is ready for new content.',
    time: 'Now',
  },
] as const

export const dashboardTopbarData = {
  lastUpdated: 'Today, 9:42 AM',
  currency: 'USD',
  dateRange: 'Feb 18 - March 18',
} as const

export const dashboardPeriods = [
  { value: 'monthly', label: 'Monthly' },
  { value: 'weekly', label: 'Weekly' },
  { value: 'quarterly', label: 'Quarterly' },
  { value: 'yearly', label: 'Yearly' },
] as const

export type PeriodValue = (typeof dashboardPeriods)[number]['value']

export const dashboardSummaryCardsByPeriod = {
  monthly: [
    {
      id: 'net-worth',
      title: 'Total Net worth',
      value: '$2.8M',
      icon: 'wallet',
      color: 'var(--chart-4)',
      change: {
        value: '15%',
        label: 'Increased vs last month',
        tone: 'positive',
      },
      chart: {
        type: 'line',
        points: [
          { label: 'Jan', x: 0, y: 48 },
          { label: 'Feb', x: 54, y: 42 },
          { label: 'Mar', x: 96, y: 37 },
          { label: 'Apr', x: 144, y: 24 },
          { label: 'May', x: 188, y: 12 },
          { label: 'Jun', x: 216, y: 4 },
        ],
      },
    },
    {
      id: 'portfolio-return',
      title: 'Portfolio return',
      value: '+14.7%',
      icon: 'trend',
      color: 'var(--chart-1)',
      target: {
        current: '42%',
        label: 'to target',
        progress: 42,
        gained: '$184K gained',
        goal: 'Goal $438K',
      },
      bars: [
        { label: 'Jan', value: 12 },
        { label: 'Feb', value: 18 },
        { label: 'Mar', value: 8 },
        { label: 'Apr', value: 19 },
        { label: 'May', value: 12 },
        { label: 'Jun', value: 28 },
      ],
      chart: {
        type: 'bars',
      },
    },
    {
      id: 'asset-classes',
      title: 'Asset classes',
      value: '$2.05M',
      icon: 'pie',
      color: 'var(--chart-4)',
      allocations: [
        { label: 'Stock & Crypto', value: '$1.20M', share: 58, color: 'var(--chart-4)' },
        { label: 'Real estate', value: '$854K', share: 42, color: 'var(--chart-1)' },
      ],
    },
    {
      id: 'risk-score',
      title: 'Risk score',
      value: '62',
      suffix: '/ 100',
      icon: 'shield',
      color: 'var(--chart-3)',
      change: {
        value: 'Moderate,',
        label: 'well diversified',
        tone: 'neutral',
      },
      chart: {
        type: 'area',
        points: [
          { label: 'Jan', x: 0, y: 28 },
          { label: 'Feb', x: 50, y: 18 },
          { label: 'Mar', x: 100, y: 9 },
          { label: 'Apr', x: 150, y: 22 },
          { label: 'May', x: 200, y: 36 },
          { label: 'Jun', x: 252, y: 25 },
        ],
      },
    },
  ],
  weekly: [
    {
      id: 'net-worth',
      title: 'Total Net worth',
      value: '$2.74M',
      icon: 'wallet',
      color: 'var(--chart-4)',
      change: {
        value: '4.2%',
        label: 'Increased vs last week',
        tone: 'positive',
      },
      chart: {
        type: 'line',
        points: [
          { label: 'Mon', x: 0, y: 44 },
          { label: 'Tue', x: 42, y: 40 },
          { label: 'Wed', x: 84, y: 46 },
          { label: 'Thu', x: 126, y: 30 },
          { label: 'Fri', x: 168, y: 22 },
          { label: 'Sat', x: 216, y: 14 },
        ],
      },
    },
    {
      id: 'portfolio-return',
      title: 'Portfolio return',
      value: '+3.8%',
      icon: 'trend',
      color: 'var(--chart-1)',
      target: {
        current: '28%',
        label: 'to target',
        progress: 28,
        gained: '$42K gained',
        goal: 'Goal $150K',
      },
      bars: [
        { label: 'Mon', value: 10 },
        { label: 'Tue', value: 16 },
        { label: 'Wed', value: 12 },
        { label: 'Thu', value: 23 },
        { label: 'Fri', value: 15 },
        { label: 'Sat', value: 24 },
      ],
      chart: {
        type: 'bars',
      },
    },
    {
      id: 'asset-classes',
      title: 'Asset classes',
      value: '$2.02M',
      icon: 'pie',
      color: 'var(--chart-4)',
      allocations: [
        { label: 'Stock & Crypto', value: '$1.16M', share: 57, color: 'var(--chart-4)' },
        { label: 'Real estate', value: '$862K', share: 43, color: 'var(--chart-1)' },
      ],
    },
    {
      id: 'risk-score',
      title: 'Risk score',
      value: '58',
      suffix: '/ 100',
      icon: 'shield',
      color: 'var(--chart-3)',
      change: {
        value: 'Balanced,',
        label: 'lower volatility',
        tone: 'neutral',
      },
      chart: {
        type: 'area',
        points: [
          { label: 'Mon', x: 0, y: 24 },
          { label: 'Tue', x: 50, y: 18 },
          { label: 'Wed', x: 100, y: 20 },
          { label: 'Thu', x: 150, y: 30 },
          { label: 'Fri', x: 200, y: 26 },
          { label: 'Sat', x: 252, y: 18 },
        ],
      },
    },
  ],
  quarterly: [
    {
      id: 'net-worth',
      title: 'Total Net worth',
      value: '$2.92M',
      icon: 'wallet',
      color: 'var(--chart-4)',
      change: {
        value: '18%',
        label: 'Increased vs last quarter',
        tone: 'positive',
      },
      chart: {
        type: 'line',
        points: [
          { label: 'Q4 2024', x: 0, y: 50 },
          { label: 'Q1 2025', x: 44, y: 45 },
          { label: 'Q2 2025', x: 86, y: 32 },
          { label: 'Q3 2025', x: 128, y: 27 },
          { label: 'Q4 2025', x: 176, y: 13 },
          { label: 'Q1 2026', x: 216, y: 6 },
        ],
      },
    },
    {
      id: 'portfolio-return',
      title: 'Portfolio return',
      value: '+18.9%',
      icon: 'trend',
      color: 'var(--chart-1)',
      target: {
        current: '56%',
        label: 'to target',
        progress: 56,
        gained: '$245K gained',
        goal: 'Goal $438K',
      },
      bars: [
        { label: 'Q4 2024', value: 16 },
        { label: 'Q1 2025', value: 22 },
        { label: 'Q2 2025', value: 14 },
        { label: 'Q3 2025', value: 26 },
        { label: 'Q4 2025', value: 18 },
        { label: 'Q1 2026', value: 30 },
      ],
      chart: {
        type: 'bars',
      },
    },
    {
      id: 'asset-classes',
      title: 'Asset classes',
      value: '$2.17M',
      icon: 'pie',
      color: 'var(--chart-4)',
      allocations: [
        { label: 'Stock & Crypto', value: '$1.32M', share: 61, color: 'var(--chart-4)' },
        { label: 'Real estate', value: '$846K', share: 39, color: 'var(--chart-1)' },
      ],
    },
    {
      id: 'risk-score',
      title: 'Risk score',
      value: '65',
      suffix: '/ 100',
      icon: 'shield',
      color: 'var(--chart-3)',
      change: {
        value: 'Moderate,',
        label: 'growth tilted',
        tone: 'neutral',
      },
      chart: {
        type: 'area',
        points: [
          { label: 'Q4 2024', x: 0, y: 32 },
          { label: 'Q1 2025', x: 50, y: 22 },
          { label: 'Q2 2025', x: 100, y: 12 },
          { label: 'Q3 2025', x: 150, y: 18 },
          { label: 'Q4 2025', x: 200, y: 34 },
          { label: 'Q1 2026', x: 252, y: 28 },
        ],
      },
    },
  ],
  yearly: [
    {
      id: 'net-worth',
      title: 'Total Net worth',
      value: '$3.24M',
      icon: 'wallet',
      color: 'var(--chart-4)',
      change: {
        value: '31%',
        label: 'Increased vs last year',
        tone: 'positive',
      },
      chart: {
        type: 'line',
        points: [
          { label: '2021', x: 0, y: 52 },
          { label: '2022', x: 42, y: 48 },
          { label: '2023', x: 84, y: 38 },
          { label: '2024', x: 128, y: 20 },
          { label: '2025', x: 172, y: 16 },
          { label: '2026', x: 216, y: 2 },
        ],
      },
    },
    {
      id: 'portfolio-return',
      title: 'Portfolio return',
      value: '+26.4%',
      icon: 'trend',
      color: 'var(--chart-1)',
      target: {
        current: '72%',
        label: 'to target',
        progress: 72,
        gained: '$316K gained',
        goal: 'Goal $438K',
      },
      bars: [
        { label: '2021', value: 14 },
        { label: '2022', value: 21 },
        { label: '2023', value: 18 },
        { label: '2024', value: 24 },
        { label: '2025', value: 20 },
        { label: '2026', value: 31 },
      ],
      chart: {
        type: 'bars',
      },
    },
    {
      id: 'asset-classes',
      title: 'Asset classes',
      value: '$2.43M',
      icon: 'pie',
      color: 'var(--chart-4)',
      allocations: [
        { label: 'Stock & Crypto', value: '$1.56M', share: 64, color: 'var(--chart-4)' },
        { label: 'Real estate', value: '$872K', share: 36, color: 'var(--chart-1)' },
      ],
    },
    {
      id: 'risk-score',
      title: 'Risk score',
      value: '69',
      suffix: '/ 100',
      icon: 'shield',
      color: 'var(--chart-3)',
      change: {
        value: 'Moderate,',
        label: 'higher growth mix',
        tone: 'neutral',
      },
      chart: {
        type: 'area',
        points: [
          { label: '2021', x: 0, y: 35 },
          { label: '2022', x: 50, y: 20 },
          { label: '2023', x: 100, y: 14 },
          { label: '2024', x: 150, y: 10 },
          { label: '2025', x: 200, y: 26 },
          { label: '2026', x: 252, y: 32 },
        ],
      },
    },
  ],
} as const satisfies Record<PeriodValue, readonly unknown[]>

export const defaultDashboardPeriod = dashboardPeriods[0].value

const performanceMetrics = [
  { label: 'Stocks', value: '$1.20M', change: '+11.2%', tone: 'positive' },
  { label: 'Real estate', value: '$840K', change: '+6.8%', tone: 'positive' },
  { label: 'Crypto', value: '$380K', change: '+35.8%', tone: 'positive' },
  { label: 'Fixed Income', value: '$427K', change: '-1.1%', tone: 'negative' },
] as const

const allocationItems = [
  { label: 'Stocks', value: '$1.20M', percent: 42, color: 'var(--chart-1)' },
  { label: 'Real Estate', value: '$854K', percent: 30, color: 'var(--chart-4)' },
  { label: 'Crypto', value: '$370K', percent: 13, color: 'var(--chart-2)' },
  { label: 'Fixed income', value: '$427K', percent: 15, color: 'var(--chart-3)' },
] as const

export const dashboardDetailByPeriod = {
  monthly: {
    performance: {
      title: 'Portfolio Performance',
      trend: '+14.7% YTD',
      actionLabel: 'Full Analysis',
      yAxis: ['700K', '600K', '500K', '400K', '300K', '200K'],
      legend: [
        { label: 'Your Portfolio', color: 'var(--chart-4)' },
        { label: 'S&P 500', color: 'var(--chart-1)' },
      ],
      data: [
        { label: 'Week 1', axisLabel: 'Week 1', portfolio: 310, benchmark: 280 },
        { label: 'Week 1', portfolio: 295, benchmark: 260 },
        { label: 'Week 1', portfolio: 330, benchmark: 285 },
        { label: 'Week 1', portfolio: 470, benchmark: 330 },
        { label: 'Week 2', portfolio: 420, benchmark: 315 },
        { label: 'Week 2', axisLabel: 'Week 2', portfolio: 250, benchmark: 300 },
        { label: 'Week 2', portfolio: 370, benchmark: 295 },
        { label: 'Week 2', portfolio: 355, benchmark: 285 },
        { label: 'Week 3', portfolio: 380, benchmark: 280 },
        { label: 'Week 3', portfolio: 360, benchmark: 290 },
        { label: 'Week 3', axisLabel: 'Week 3', portfolio: 390, benchmark: 310 },
        { label: 'Week 3', portfolio: 430, benchmark: 345 },
        { label: 'Week 4', portfolio: 610, benchmark: 385 },
        { label: 'Week 4', portfolio: 640, benchmark: 440 },
        { label: 'Week 4', axisLabel: 'Week 4', portfolio: 590, benchmark: 450 },
      ],
      metrics: performanceMetrics,
    },
    allocation: {
      title: 'Asset Allocation',
      status: 'Balanced',
      centerValue: '4',
      centerLabel: 'Classes',
      items: allocationItems,
    },
  },
  weekly: {
    performance: {
      title: 'Portfolio Performance',
      trend: '+3.8% WTD',
      actionLabel: 'Full Analysis',
      yAxis: ['700K', '600K', '500K', '400K', '300K', '200K'],
      legend: [
        { label: 'Your Portfolio', color: 'var(--chart-4)' },
        { label: 'S&P 500', color: 'var(--chart-1)' },
      ],
      data: [
        { label: 'Mon', axisLabel: 'Mon', portfolio: 300, benchmark: 285 },
        { label: 'Mon', portfolio: 315, benchmark: 275 },
        { label: 'Tue', axisLabel: 'Tue', portfolio: 305, benchmark: 292 },
        { label: 'Tue', portfolio: 352, benchmark: 310 },
        { label: 'Wed', axisLabel: 'Wed', portfolio: 340, benchmark: 300 },
        { label: 'Wed', portfolio: 390, benchmark: 318 },
        { label: 'Thu', axisLabel: 'Thu', portfolio: 372, benchmark: 330 },
        { label: 'Thu', portfolio: 410, benchmark: 348 },
      ],
      metrics: performanceMetrics,
    },
    allocation: {
      title: 'Asset Allocation',
      status: 'Balanced',
      centerValue: '4',
      centerLabel: 'Classes',
      items: allocationItems,
    },
  },
  quarterly: {
    performance: {
      title: 'Portfolio Performance',
      trend: '+18.9% QTD',
      actionLabel: 'Full Analysis',
      yAxis: ['700K', '600K', '500K', '400K', '300K', '200K'],
      legend: [
        { label: 'Your Portfolio', color: 'var(--chart-4)' },
        { label: 'S&P 500', color: 'var(--chart-1)' },
      ],
      data: [
        { label: 'Jan', axisLabel: 'Jan', portfolio: 280, benchmark: 260 },
        { label: 'Jan', portfolio: 350, benchmark: 300 },
        { label: 'Feb', axisLabel: 'Feb', portfolio: 335, benchmark: 290 },
        { label: 'Feb', portfolio: 410, benchmark: 315 },
        { label: 'Mar', axisLabel: 'Mar', portfolio: 390, benchmark: 330 },
        { label: 'Mar', portfolio: 455, benchmark: 360 },
        { label: 'Apr', axisLabel: 'Apr', portfolio: 620, benchmark: 420 },
        { label: 'Apr', portfolio: 585, benchmark: 435 },
      ],
      metrics: performanceMetrics,
    },
    allocation: {
      title: 'Asset Allocation',
      status: 'Balanced',
      centerValue: '4',
      centerLabel: 'Classes',
      items: allocationItems,
    },
  },
  yearly: {
    performance: {
      title: 'Portfolio Performance',
      trend: '+26.4% YTD',
      actionLabel: 'Full Analysis',
      yAxis: ['700K', '600K', '500K', '400K', '300K', '200K'],
      legend: [
        { label: 'Your Portfolio', color: 'var(--chart-4)' },
        { label: 'S&P 500', color: 'var(--chart-1)' },
      ],
      data: [
        { label: 'Q1', axisLabel: 'Q1', portfolio: 260, benchmark: 240 },
        { label: 'Q1', portfolio: 340, benchmark: 285 },
        { label: 'Q2', axisLabel: 'Q2', portfolio: 315, benchmark: 275 },
        { label: 'Q2', portfolio: 390, benchmark: 300 },
        { label: 'Q3', axisLabel: 'Q3', portfolio: 440, benchmark: 335 },
        { label: 'Q3', portfolio: 470, benchmark: 360 },
        { label: 'Q4', axisLabel: 'Q4', portfolio: 630, benchmark: 410 },
        { label: 'Q4', portfolio: 680, benchmark: 460 },
      ],
      metrics: performanceMetrics,
    },
    allocation: {
      title: 'Asset Allocation',
      status: 'Balanced',
      centerValue: '4',
      centerLabel: 'Classes',
      items: allocationItems,
    },
  },
} as const

const dicebearGlassAvatar = (seed: string) =>
  `https://api.dicebear.com/10.x/glass/svg?seed=${encodeURIComponent(seed)}`

const holdingLogoUrls = {
  aapl: dicebearGlassAvatar('AAPL'),
  bitcoin: dicebearGlassAvatar('Bitcoin'),
  oakAve: dicebearGlassAvatar('55 Oak Ave'),
  msft: dicebearGlassAvatar('MSFT'),
  treasury: dicebearGlassAvatar('US Treasury 10Y'),
} as const

const topHoldings = [
  {
    no: '1',
    asset: 'AAPL',
    type: 'US Equity',
    value: '$284,500',
    allocation: '10.0%',
    return: '+22.4%',
    day: '+1.8%',
    logo: holdingLogoUrls.aapl,
    tone: 'positive',
    dayTone: 'positive',
  },
  {
    no: '2',
    asset: 'Bitcoin',
    type: 'Crypto Asset',
    value: '$198,720',
    allocation: '7.0%',
    return: '+61.2%',
    day: '+3.4%',
    logo: holdingLogoUrls.bitcoin,
    tone: 'positive',
    dayTone: 'positive',
  },
  {
    no: '3',
    asset: '55 Oak Ave',
    type: 'Real Estate',
    value: '$1,100,000',
    allocation: '11.2%',
    return: '+15.3%',
    day: '-----',
    logo: holdingLogoUrls.oakAve,
    tone: 'positive',
    dayTone: 'neutral',
  },
  {
    no: '4',
    asset: 'MSFT',
    type: 'US Equity',
    value: '$950,000',
    allocation: '9.7%',
    return: '+20.1%',
    day: '+2.3%',
    logo: holdingLogoUrls.msft,
    tone: 'positive',
    dayTone: 'positive',
  },
  {
    no: '5',
    asset: 'US Treasury 10Y',
    type: 'US Equity',
    value: '$1,100,000',
    allocation: '8.8%',
    return: '-1.2%',
    day: '-----',
    logo: holdingLogoUrls.treasury,
    tone: 'negative',
    dayTone: 'neutral',
  },
] as const

const smartInsights = [
  {
    title: 'Rebalance opportunity',
    description: 'Crypto at 13%, above 10% target. Trim $68K.',
    action: 'Rebalance Now',
    icon: 'scale',
  },
  {
    title: 'Tax-loss harvesting',
    description: '2 holdings eligible, saving est. $12,400',
    action: 'Review',
    icon: 'taxes',
  },
  {
    title: 'Dividend reinvestment',
    description: '$3,840 pending. DRIP adds +0.4% annually.',
    action: 'Enable DRIP',
    icon: 'reload',
  },
] as const

export const dashboardBottomByPeriod = {
  monthly: {
    holdings: {
      title: 'Top Holdings',
      actionLabel: 'View all',
      columns: ['No', 'Asset', 'Value', 'Allocation', 'Return', '24H'],
      rows: topHoldings,
    },
    insights: {
      title: 'Smart Insights',
      status: 'AI Recommendation',
      items: smartInsights,
    },
  },
  weekly: {
    holdings: {
      title: 'Top Holdings',
      actionLabel: 'View all',
      columns: ['No', 'Asset', 'Value', 'Allocation', 'Return', '24H'],
      rows: topHoldings,
    },
    insights: {
      title: 'Smart Insights',
      status: 'AI Recommendation',
      items: smartInsights,
    },
  },
  quarterly: {
    holdings: {
      title: 'Top Holdings',
      actionLabel: 'View all',
      columns: ['No', 'Asset', 'Value', 'Allocation', 'Return', '24H'],
      rows: topHoldings,
    },
    insights: {
      title: 'Smart Insights',
      status: 'AI Recommendation',
      items: smartInsights,
    },
  },
  yearly: {
    holdings: {
      title: 'Top Holdings',
      actionLabel: 'View all',
      columns: ['No', 'Asset', 'Value', 'Allocation', 'Return', '24H'],
      rows: topHoldings,
    },
    insights: {
      title: 'Smart Insights',
      status: 'AI Recommendation',
      items: smartInsights,
    },
  },
} as const

const analyticsMetrics = {
  monthly: [
    {
      id: 'net-worth',
      title: 'Total Net worth',
      value: '1.84',
      description: 'Strong risk-adjusted return',
      color: 'var(--chart-4)',
      type: 'line',
      data: [
        { label: 'Jan', x: 0, y: 36 },
        { label: 'Feb', x: 44, y: 34 },
        { label: 'Mar', x: 88, y: 31 },
        { label: 'Apr', x: 132, y: 26 },
        { label: 'May', x: 176, y: 20 },
        { label: 'Jun', x: 220, y: 14 },
      ],
    },
    {
      id: 'risk-score',
      title: 'Risk score',
      value: '-4.2%',
      description: 'Peak to trough - Jan 2026',
      color: 'var(--chart-5)',
      type: 'area',
      data: [
        { label: 'Jan', x: 0, y: 26 },
        { label: 'Feb', x: 44, y: 20 },
        { label: 'Mar', x: 88, y: 16 },
        { label: 'Apr', x: 132, y: 18 },
        { label: 'May', x: 176, y: 27 },
        { label: 'Jun', x: 220, y: 38 },
      ],
    },
    {
      id: 'portfolio-return',
      title: 'Portfolio return',
      value: '8.6%',
      description: 'Below benchmark avg 10.2%',
      color: 'var(--chart-3)',
      type: 'bars',
      data: [
        { label: 'Jan', value: 18 },
        { label: 'Feb', value: 24 },
        { label: 'Mar', value: 17 },
        { label: 'Apr', value: 22 },
        { label: 'May', value: 16 },
        { label: 'Jun', value: 24 },
      ],
    },
  ],
  weekly: [
    {
      id: 'net-worth',
      title: 'Total Net worth',
      value: '1.31',
      description: 'Stable short-term efficiency',
      color: 'var(--chart-4)',
      type: 'line',
      data: [
        { label: 'Mon', x: 0, y: 34 },
        { label: 'Tue', x: 44, y: 30 },
        { label: 'Wed', x: 88, y: 32 },
        { label: 'Thu', x: 132, y: 25 },
        { label: 'Fri', x: 176, y: 18 },
        { label: 'Sat', x: 220, y: 16 },
      ],
    },
    {
      id: 'risk-score',
      title: 'Risk score',
      value: '-1.1%',
      description: 'Intraday drawdown - Thu',
      color: 'var(--chart-5)',
      type: 'area',
      data: [
        { label: 'Mon', x: 0, y: 30 },
        { label: 'Tue', x: 44, y: 22 },
        { label: 'Wed', x: 88, y: 18 },
        { label: 'Thu', x: 132, y: 24 },
        { label: 'Fri', x: 176, y: 31 },
        { label: 'Sat', x: 220, y: 34 },
      ],
    },
    {
      id: 'portfolio-return',
      title: 'Portfolio return',
      value: '3.8%',
      description: 'Above benchmark avg 3.0%',
      color: 'var(--chart-3)',
      type: 'bars',
      data: [
        { label: 'Mon', value: 8 },
        { label: 'Tue', value: 12 },
        { label: 'Wed', value: 10 },
        { label: 'Thu', value: 15 },
        { label: 'Fri', value: 11 },
        { label: 'Sat', value: 14 },
      ],
    },
  ],
  quarterly: [
    {
      id: 'net-worth',
      title: 'Total Net worth',
      value: '2.12',
      description: 'Improving quarterly efficiency',
      color: 'var(--chart-4)',
      type: 'line',
      data: [
        { label: 'Jan', x: 0, y: 38 },
        { label: 'Feb', x: 44, y: 33 },
        { label: 'Mar', x: 88, y: 28 },
        { label: 'Apr', x: 132, y: 20 },
        { label: 'May', x: 176, y: 16 },
        { label: 'Jun', x: 220, y: 10 },
      ],
    },
    {
      id: 'risk-score',
      title: 'Risk score',
      value: '-3.5%',
      description: 'Peak to trough - Feb 2026',
      color: 'var(--chart-5)',
      type: 'area',
      data: [
        { label: 'Jan', x: 0, y: 28 },
        { label: 'Feb', x: 44, y: 18 },
        { label: 'Mar', x: 88, y: 14 },
        { label: 'Apr', x: 132, y: 19 },
        { label: 'May', x: 176, y: 24 },
        { label: 'Jun', x: 220, y: 32 },
      ],
    },
    {
      id: 'portfolio-return',
      title: 'Portfolio return',
      value: '18.9%',
      description: 'Above benchmark avg 15.0%',
      color: 'var(--chart-3)',
      type: 'bars',
      data: [
        { label: 'Jan', value: 15 },
        { label: 'Feb', value: 20 },
        { label: 'Mar', value: 18 },
        { label: 'Apr', value: 24 },
        { label: 'May', value: 19 },
        { label: 'Jun', value: 27 },
      ],
    },
  ],
  yearly: [
    {
      id: 'net-worth',
      title: 'Total Net worth',
      value: '2.68',
      description: 'Best annual risk-adjusted return',
      color: 'var(--chart-4)',
      type: 'line',
      data: [
        { label: '2021', x: 0, y: 42 },
        { label: '2022', x: 44, y: 36 },
        { label: '2023', x: 88, y: 30 },
        { label: '2024', x: 132, y: 22 },
        { label: '2025', x: 176, y: 12 },
        { label: '2026', x: 220, y: 6 },
      ],
    },
    {
      id: 'risk-score',
      title: 'Risk score',
      value: '-6.4%',
      description: 'Peak to trough - 2024',
      color: 'var(--chart-5)',
      type: 'area',
      data: [
        { label: '2021', x: 0, y: 32 },
        { label: '2022', x: 44, y: 20 },
        { label: '2023', x: 88, y: 14 },
        { label: '2024', x: 132, y: 12 },
        { label: '2025', x: 176, y: 22 },
        { label: '2026', x: 220, y: 30 },
      ],
    },
    {
      id: 'portfolio-return',
      title: 'Portfolio return',
      value: '26.4%',
      description: 'Above benchmark avg 21.3%',
      color: 'var(--chart-3)',
      type: 'bars',
      data: [
        { label: '2021', value: 12 },
        { label: '2022', value: 17 },
        { label: '2023', value: 15 },
        { label: '2024', value: 21 },
        { label: '2025', value: 18 },
        { label: '2026', value: 26 },
      ],
    },
  ],
} as const

const analyticsPeriodLabels = {
  monthly: ['Week 1', 'Week 2', 'Week 3', 'Week 4'],
  weekly: ['Mon', 'Tue', 'Wed', 'Thu'],
  quarterly: ['Jan', 'Feb', 'Mar', 'Apr'],
  yearly: ['Q1', 'Q2', 'Q3', 'Q4'],
} as const

const analyticsPerformanceLegend = [
  { dataKey: 'portfolio', label: 'Portfolio +14.7%', color: 'var(--chart-4)' },
  { dataKey: 'benchmark', label: 'S&P 500 +11.4%', color: 'var(--chart-1)' },
  { dataKey: 'balanced', label: '60/40 +7.2%', color: 'var(--chart-2)' },
] as const

const analyticsPerformanceData = {
  monthly: [
    { label: 'Week 1', axisLabel: 'Week 1', portfolio: 310, benchmark: 285, balanced: 245 },
    { label: 'Week 1', portfolio: 295, benchmark: 270, balanced: 245 },
    { label: 'Week 1', portfolio: 330, benchmark: 292, balanced: 230 },
    { label: 'Week 1', portfolio: 465, benchmark: 325, balanced: 240 },
    { label: 'Week 2', axisLabel: 'Week 2', portfolio: 405, benchmark: 315, balanced: 255 },
    { label: 'Week 2', portfolio: 245, benchmark: 305, balanced: 250 },
    { label: 'Week 2', portfolio: 365, benchmark: 300, balanced: 255 },
    { label: 'Week 2', portfolio: 380, benchmark: 290, balanced: 265 },
    { label: 'Week 3', axisLabel: 'Week 3', portfolio: 385, benchmark: 292, balanced: 245 },
    { label: 'Week 3', portfolio: 360, benchmark: 300, balanced: 265 },
    { label: 'Week 3', portfolio: 405, benchmark: 320, balanced: 285 },
    { label: 'Week 3', portfolio: 430, benchmark: 345, balanced: 310 },
    { label: 'Week 4', axisLabel: 'Week 4', portfolio: 610, benchmark: 390, balanced: 340 },
    { label: 'Week 4', portfolio: 640, benchmark: 440, balanced: 365 },
    { label: 'Week 4', portfolio: 590, benchmark: 435, balanced: 395 },
  ],
  weekly: [
    { label: 'Mon', axisLabel: 'Mon', portfolio: 292, benchmark: 276, balanced: 238 },
    { label: 'Mon', portfolio: 320, benchmark: 285, balanced: 248 },
    { label: 'Tue', axisLabel: 'Tue', portfolio: 345, benchmark: 300, balanced: 255 },
    { label: 'Tue', portfolio: 360, benchmark: 315, balanced: 270 },
    { label: 'Wed', axisLabel: 'Wed', portfolio: 385, benchmark: 318, balanced: 285 },
    { label: 'Wed', portfolio: 370, benchmark: 326, balanced: 295 },
    { label: 'Thu', axisLabel: 'Thu', portfolio: 430, benchmark: 350, balanced: 318 },
    { label: 'Thu', portfolio: 455, benchmark: 365, balanced: 332 },
  ],
  quarterly: [
    { label: 'Jan', axisLabel: 'Jan', portfolio: 280, benchmark: 260, balanced: 235 },
    { label: 'Jan', portfolio: 350, benchmark: 300, balanced: 255 },
    { label: 'Feb', axisLabel: 'Feb', portfolio: 335, benchmark: 290, balanced: 248 },
    { label: 'Feb', portfolio: 410, benchmark: 315, balanced: 270 },
    { label: 'Mar', axisLabel: 'Mar', portfolio: 390, benchmark: 330, balanced: 292 },
    { label: 'Mar', portfolio: 455, benchmark: 360, balanced: 312 },
    { label: 'Apr', axisLabel: 'Apr', portfolio: 620, benchmark: 420, balanced: 350 },
    { label: 'Apr', portfolio: 585, benchmark: 435, balanced: 382 },
  ],
  yearly: [
    { label: 'Q1', axisLabel: 'Q1', portfolio: 260, benchmark: 240, balanced: 220 },
    { label: 'Q1', portfolio: 340, benchmark: 285, balanced: 245 },
    { label: 'Q2', axisLabel: 'Q2', portfolio: 315, benchmark: 275, balanced: 252 },
    { label: 'Q2', portfolio: 390, benchmark: 300, balanced: 270 },
    { label: 'Q3', axisLabel: 'Q3', portfolio: 440, benchmark: 335, balanced: 305 },
    { label: 'Q3', portfolio: 470, benchmark: 360, balanced: 325 },
    { label: 'Q4', axisLabel: 'Q4', portfolio: 630, benchmark: 410, balanced: 370 },
    { label: 'Q4', portfolio: 680, benchmark: 460, balanced: 410 },
  ],
} as const

const analyticsMonthlyReturns = [
  { label: 'Jan', stocks: 1.8, realEstate: 1.1, crypto: 4.8, fixedIncome: 0.5 },
  { label: 'Feb', stocks: 1.6, realEstate: 0.7, crypto: 4.9, fixedIncome: 0.4 },
  { label: 'Mar', stocks: 2.9, realEstate: 0.7, crypto: -1.8, fixedIncome: 0.3 },
  { label: 'Apr', stocks: 1.9, realEstate: 0.4, crypto: 8.0, fixedIncome: 0.5 },
  { label: 'May', stocks: 1.8, realEstate: 1.0, crypto: 4.8, fixedIncome: 0.4 },
  { label: 'Jun', stocks: 3.7, realEstate: 1.0, crypto: 6.8, fixedIncome: 0.4 },
] as const

const analyticsIncomeStreams = [
  { label: 'Jan', dividends: 0.9, rentalIncome: 3.2 },
  { label: 'Feb', dividends: 0.7, rentalIncome: 2.6 },
  { label: 'Mar', dividends: 1.3, rentalIncome: 2.5 },
  { label: 'Apr', dividends: 0.9, rentalIncome: 1.2 },
  { label: 'May', dividends: 1.6, rentalIncome: 2.3 },
  { label: 'Jun', dividends: 0.9, rentalIncome: 2.6 },
] as const

const analyticsWeeklyReturns = [
  { label: 'Mon', stocks: 0.4, realEstate: 0.2, crypto: 1.1, fixedIncome: 0.1 },
  { label: 'Tue', stocks: 0.7, realEstate: 0.3, crypto: 1.6, fixedIncome: 0.2 },
  { label: 'Wed', stocks: -0.3, realEstate: 0.1, crypto: 0.8, fixedIncome: 0.1 },
  { label: 'Thu', stocks: 1.0, realEstate: 0.3, crypto: 2.2, fixedIncome: 0.2 },
  { label: 'Fri', stocks: 0.6, realEstate: 0.2, crypto: 1.4, fixedIncome: 0.1 },
  { label: 'Sat', stocks: 0.9, realEstate: 0.2, crypto: 1.9, fixedIncome: 0.1 },
] as const

const analyticsQuarterlyReturns = [
  { label: 'Jan', stocks: 2.4, realEstate: 1.2, crypto: 5.8, fixedIncome: 0.5 },
  { label: 'Feb', stocks: 2.0, realEstate: 1.0, crypto: 4.6, fixedIncome: 0.4 },
  { label: 'Mar', stocks: 3.1, realEstate: 1.4, crypto: 6.2, fixedIncome: 0.6 },
  { label: 'Apr', stocks: 2.8, realEstate: 1.1, crypto: 5.4, fixedIncome: 0.5 },
  { label: 'May', stocks: 3.4, realEstate: 1.5, crypto: 7.0, fixedIncome: 0.7 },
  { label: 'Jun', stocks: 4.0, realEstate: 1.6, crypto: 7.8, fixedIncome: 0.7 },
] as const

const analyticsYearlyReturns = [
  { label: '2021', stocks: 8.4, realEstate: 3.2, crypto: 12.8, fixedIncome: 1.4 },
  { label: '2022', stocks: -2.8, realEstate: 2.6, crypto: -3.5, fixedIncome: 0.9 },
  { label: '2023', stocks: 9.2, realEstate: 4.1, crypto: 14.6, fixedIncome: 1.8 },
  { label: '2024', stocks: 11.4, realEstate: 4.7, crypto: 18.2, fixedIncome: 2.1 },
  { label: '2025', stocks: 10.8, realEstate: 5.0, crypto: 16.5, fixedIncome: 2.2 },
  { label: '2026', stocks: 13.6, realEstate: 5.8, crypto: 21.0, fixedIncome: 2.4 },
] as const

const analyticsWeeklyIncomeStreams = [
  { label: 'Mon', dividends: 0.2, rentalIncome: 0.6 },
  { label: 'Tue', dividends: 0.1, rentalIncome: 0.5 },
  { label: 'Wed', dividends: 0.3, rentalIncome: 0.6 },
  { label: 'Thu', dividends: 0.2, rentalIncome: 0.4 },
  { label: 'Fri', dividends: 0.3, rentalIncome: 0.5 },
  { label: 'Sat', dividends: 0.2, rentalIncome: 0.6 },
] as const

const analyticsQuarterlyIncomeStreams = [
  { label: 'Jan', dividends: 1.1, rentalIncome: 3.1 },
  { label: 'Feb', dividends: 0.9, rentalIncome: 2.7 },
  { label: 'Mar', dividends: 1.4, rentalIncome: 3.0 },
  { label: 'Apr', dividends: 1.0, rentalIncome: 2.4 },
  { label: 'May', dividends: 1.6, rentalIncome: 3.2 },
  { label: 'Jun', dividends: 1.2, rentalIncome: 3.0 },
] as const

const analyticsYearlyIncomeStreams = [
  { label: '2021', dividends: 3.4, rentalIncome: 9.8 },
  { label: '2022', dividends: 4.0, rentalIncome: 10.7 },
  { label: '2023', dividends: 4.8, rentalIncome: 12.1 },
  { label: '2024', dividends: 5.5, rentalIncome: 13.6 },
  { label: '2025', dividends: 6.2, rentalIncome: 14.8 },
  { label: '2026', dividends: 7.1, rentalIncome: 16.4 },
] as const

export const analyticsDataByPeriod = {
  monthly: {
    performance: {
      title: 'Portfolio Performance',
      subtitle: 'Portfolio performance over 6 months',
      trend: 'Outperforming +3.3pp',
      compareLabel: 'vs S&P 500',
      labels: analyticsPeriodLabels.monthly,
      legend: analyticsPerformanceLegend,
      data: analyticsPerformanceData.monthly,
    },
    metrics: analyticsMetrics.monthly,
    returns: {
      title: 'Monthly returns',
      subtitle: 'Per asset class 2026',
      status: 'All positive',
      series: [
        { dataKey: 'stocks', label: 'Stocks', color: 'var(--chart-1)' },
        { dataKey: 'realEstate', label: 'Real Estate', color: 'var(--chart-4)' },
        { dataKey: 'crypto', label: 'Crypto', color: 'var(--chart-3)' },
        { dataKey: 'fixedIncome', label: 'Fixed Income', color: 'var(--chart-2)' },
      ],
      data: analyticsMonthlyReturns,
    },
    income: {
      title: 'Income streams',
      subtitle: 'Dividends & rental income - 2026',
      status: '$18,240 YTD',
      series: [
        { dataKey: 'dividends', label: 'Dividends', color: 'var(--chart-1)' },
        { dataKey: 'rentalIncome', label: 'Rental Income', color: 'var(--chart-4)' },
      ],
      data: analyticsIncomeStreams,
    },
  },
  weekly: {
    performance: {
      title: 'Portfolio Performance',
      subtitle: 'Portfolio performance this week',
      trend: 'Outperforming +0.8pp',
      compareLabel: 'vs S&P 500',
      labels: analyticsPeriodLabels.weekly,
      legend: analyticsPerformanceLegend,
      data: analyticsPerformanceData.weekly,
    },
    metrics: analyticsMetrics.weekly,
    returns: {
      title: 'Daily returns',
      subtitle: 'Per asset class this week',
      status: 'All positive',
      series: [
        { dataKey: 'stocks', label: 'Stocks', color: 'var(--chart-1)' },
        { dataKey: 'realEstate', label: 'Real Estate', color: 'var(--chart-4)' },
        { dataKey: 'crypto', label: 'Crypto', color: 'var(--chart-3)' },
        { dataKey: 'fixedIncome', label: 'Fixed Income', color: 'var(--chart-2)' },
      ],
      data: analyticsWeeklyReturns,
    },
    income: {
      title: 'Income streams',
      subtitle: 'Dividends & rental income this week',
      status: '$3,120 WTD',
      series: [
        { dataKey: 'dividends', label: 'Dividends', color: 'var(--chart-1)' },
        { dataKey: 'rentalIncome', label: 'Rental Income', color: 'var(--chart-4)' },
      ],
      data: analyticsWeeklyIncomeStreams,
    },
  },
  quarterly: {
    performance: {
      title: 'Portfolio Performance',
      subtitle: 'Portfolio performance this quarter',
      trend: 'Outperforming +3.9pp',
      compareLabel: 'vs S&P 500',
      labels: analyticsPeriodLabels.quarterly,
      legend: analyticsPerformanceLegend,
      data: analyticsPerformanceData.quarterly,
    },
    metrics: analyticsMetrics.quarterly,
    returns: {
      title: 'Monthly returns',
      subtitle: 'Per asset class this quarter',
      status: 'All positive',
      series: [
        { dataKey: 'stocks', label: 'Stocks', color: 'var(--chart-1)' },
        { dataKey: 'realEstate', label: 'Real Estate', color: 'var(--chart-4)' },
        { dataKey: 'crypto', label: 'Crypto', color: 'var(--chart-3)' },
        { dataKey: 'fixedIncome', label: 'Fixed Income', color: 'var(--chart-2)' },
      ],
      data: analyticsQuarterlyReturns,
    },
    income: {
      title: 'Income streams',
      subtitle: 'Dividends & rental income this quarter',
      status: '$9,640 QTD',
      series: [
        { dataKey: 'dividends', label: 'Dividends', color: 'var(--chart-1)' },
        { dataKey: 'rentalIncome', label: 'Rental Income', color: 'var(--chart-4)' },
      ],
      data: analyticsQuarterlyIncomeStreams,
    },
  },
  yearly: {
    performance: {
      title: 'Portfolio Performance',
      subtitle: 'Portfolio performance this year',
      trend: 'Outperforming +5.1pp',
      compareLabel: 'vs S&P 500',
      labels: analyticsPeriodLabels.yearly,
      legend: analyticsPerformanceLegend,
      data: analyticsPerformanceData.yearly,
    },
    metrics: analyticsMetrics.yearly,
    returns: {
      title: 'Quarterly returns',
      subtitle: 'Per asset class 2026',
      status: 'All positive',
      series: [
        { dataKey: 'stocks', label: 'Stocks', color: 'var(--chart-1)' },
        { dataKey: 'realEstate', label: 'Real Estate', color: 'var(--chart-4)' },
        { dataKey: 'crypto', label: 'Crypto', color: 'var(--chart-3)' },
        { dataKey: 'fixedIncome', label: 'Fixed Income', color: 'var(--chart-2)' },
      ],
      data: analyticsYearlyReturns,
    },
    income: {
      title: 'Income streams',
      subtitle: 'Dividends & rental income - 2026',
      status: '$18,240 YTD',
      series: [
        { dataKey: 'dividends', label: 'Dividends', color: 'var(--chart-1)' },
        { dataKey: 'rentalIncome', label: 'Rental Income', color: 'var(--chart-4)' },
      ],
      data: analyticsYearlyIncomeStreams,
    },
  },
} as const satisfies Record<PeriodValue, unknown>
```

### `src/components/dashboards/capitalio-dashboard/demo.tsx`

Left out to keep this page a readable size (961 characters). It is in the registry item above.
