Pricing Team
Team-size calculator: a warm range slider (10–500 people) drives a big serif monthly price, annual saving line and a sapling illustration that grows with team size.
organic-soft/section/pricing-teamSource
"use client";
import { useId, useState } from "react";
import { cn } from "@/lib/utils";
export interface PricingTeamProps {
title?: string;
/** Price per employee per month (EUR). */
perSeat?: number;
min?: number;
max?: number;
defaultSize?: number;
className?: string;
}
/** Team-size calculator: a warm range slider (10–500 people) drives a big serif monthly price, annual saving line and a sapling illustration that grows with team size. */
export function PricingTeam({ title = "Pay for the team you have", perSeat = 9, min = 10, max = 500, defaultSize = 60, className }: PricingTeamProps) {
const id = useId();
const [size, setSize] = useState(defaultSize);
const monthly = size <= 20 ? 0 : size * perSeat * (size > 200 ? 0.8 : 1);
const annual = monthly * 12 * 0.85;
const scale = 0.5 + ((size - min) / (max - min)) * 0.5;
const eur = (n: number) => `€${Math.round(n).toLocaleString("en-US")}`;
return (
<section aria-labelledby={`${id}-t`} className={cn("da-section bg-da-bg text-da-fg", className)}>
<div className="da-container">
<div className="mx-auto grid max-w-4xl items-center gap-10 rounded-da-lg bg-da-surface p-8 text-da-surface-fg shadow-da-md sm:p-12 md:grid-cols-[1fr_auto]">
<div>
<h2 id={`${id}-t`} className="font-da-display text-[clamp(2rem,4vw,2.75rem)] leading-tight tracking-da-display">
{title}
</h2>
<label htmlFor={id} className="mt-8 block text-da-muted-fg">
Team size: <span className="font-da-mono text-da-fg">{size} people</span>
</label>
<input
id={id}
type="range"
min={min}
max={max}
step={10}
value={size}
onChange={(e) => setSize(Number(e.target.value))}
aria-valuetext={`${size} people`}
className="da-focus mt-3 w-full accent-(--da-primary)"
/>
<div className="mt-8 flex flex-wrap items-end gap-x-6 gap-y-2" aria-live="polite">
<p>
<span className="font-da-display text-6xl">{monthly === 0 ? "Free" : eur(monthly)}</span>
{monthly > 0 && <span className="ml-1 text-da-muted-fg">/ month</span>}
</p>
{monthly > 0 && <p className="rounded-da-pill bg-da-accent px-3 py-1 text-sm text-da-accent-fg">{eur(annual)} / year if paid annually (−15%)</p>}
</div>
<p className="mt-4 text-sm text-da-muted-fg">Free up to 20 people · 20% off every seat above 200.</p>
</div>
<svg aria-hidden viewBox="0 0 160 200" className="mx-auto h-48 w-40 overflow-visible">
<ellipse cx="80" cy="190" rx="60" ry="8" fill="var(--da-surface-2)" />
<g style={{ transform: `scale(${scale})`, transformOrigin: "80px 190px", transition: "transform var(--da-duration-slow) var(--da-ease)" }}>
<path d="M80 190V70" stroke="var(--da-primary)" strokeWidth="5" strokeLinecap="round" />
<path d="M80 130c-30 0-48-18-48-48 30 0 48 18 48 48Z" fill="var(--da-primary)" opacity=".75" />
<path d="M80 105c28 0 44-16 44-44-28 0-44 16-44 44Z" fill="var(--da-primary)" />
<path d="M80 80c-18 0-30-12-30-30 18 0 30 12 30 30Z" fill="color-mix(in oklab, var(--da-primary) 55%, var(--da-accent))" />
</g>
</svg>
</div>
</div>
</section>
);
}
export default PricingTeam;
modules/organic-soft/section/pricing-team/index.tsx
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| title | string | — | Heading. |
| perSeat | number | — | Price per employee per month (EUR). |
| min | number | — | Min. |
| max | number | — | Max. |
| defaultSize | number | — | Default Size. |
| className | string | — | Extra classes on the root. |
Other pricing variants in Organic Soft
Pricing Compare
Soft comparison table: rounded card, plan names in serif with prices, zebra rows in warm tints, sage check circles and dashes, highlighted featured column.
Pricing Single
One honest plan: a wide rounded card split into a sage-tinted price side (big serif price, CTA, guarantee) and a two-column “everything included” list.
Pricing Tiers
Three rounded plans on cream; the middle one sits on a deep sage card (inverted colors) lifted slightly higher, with a leaf ribbon; checklists use soft tinted checks.
Pricing in other art directions
Pricing Comparison
Full feature matrix: ruled table with plan headers (price + CTA, highlighted plan in yellow), ink group separator rows and check / dash / text values, horizontally scrollable on mobile.
Pricing Single
Single-plan pricing card: giant price on a yellow panel, numbered feature grid on paper, full-width ink CTA, guarantee line and a rotated pink discount sticker.
Pricing Slider
Usage-based pricing calculator: chunky range slider with a square yellow thumb, live per-unit and total price (volume tiers), included-features list and an ink CTA bar.
Pricing Tiers
Three plans glued together in one ruled strip, the highlighted plan pops out in solid yellow with a rotated badge. Monthly/yearly toggle with discount chip, custom-price plan support.
Pricing Credits
Pay-as-you-go pricing: four glass radio cards of recording-hour packs (tags like Popular / Best value) feeding a gradient summary card with price, per-hour cost, inclusions and CTA.
Pricing Duo
Free vs paid in one glass panel: two plan headers with price and CTA over a shared feature table (checks, dashes, values); the paid column is tinted with a soft gradient and a gradient CTA.
Pricing Frosted
Three frosted pricing cards with a pill billing toggle; the featured plan gets a gradient frame, gradient badge and gradient CTA and stands slightly taller. Per-seat units and custom pricing supported.
Pricing Spotlight
Single-plan pricing: a wide glass card split into a gradient price block (plan, big price, CTA, sales link) and a two-column feature list with a money-back guarantee and customer wordmarks.
Pricing Columns
Three quiet pricing columns with a segmented monthly/yearly control, per-seat units, and a featured plan lifted by a ring, soft shadow and an indigo hairline highlight on top.
Pricing Rows
Plans stacked as full-width horizontal rows (name + description, highlight chips, price, CTA), the featured one ringed in indigo, followed by an inverted ink enterprise strip.
Pricing Table
Full plan comparison table: four plan columns with price and CTA in the header, grouped feature rows with checks, dashes or values, featured column tinted; horizontally scrollable on small screens.
Pricing Usage
Seat-based pricing calculator: range slider for responders, four volume tiers with the active one highlighted, monthly/yearly toggle and a live estimated total panel with inclusions and CTA.
Pricing Columns
Three plan columns separated by hairlines (no cards): mono plan name, huge price, note, ruled feature list and a button; the featured plan has an ink button and a signal dot.
Pricing One
Single-price poster: a gigantic price set in the display face across the left, and on the right a short pitch, a two-column “included” list with en-dashes and an ink CTA; separated by a full-ink rule.
Pricing Table
Plain typographic comparison table: ink header rule, mono column heads, hairline rows, em-dash for absent features, and the featured column marked with a signal dot.
Pricing Toggle
Pricing as a ruled list: a text toggle “Monthly / Yearly (−20%)” with an underline on the active option, then one row per plan — name, blurb, price, arrow link — rows invert on hover.
Pricing Fees
Pay-as-you-go fee sheet: big per-method rates in bordered cells (4-up), then a “no hidden fees” checklist band.
Pricing Matrix
Enterprise feature matrix: sticky-looking header row of plans, grouped rows with section headings, checks/dashes/values and a tinted featured column.
Pricing Tiers
Three bordered tiers with a monthly/annual segmented toggle; the featured tier has a blue top bar and “Most popular” badge; enterprise shows “Custom”.
Pricing Volume
Volume-based fee calculator: stepped slider of monthly payment volume, the blended rate tier highlighted in a tier table, and an estimated monthly fee vs. a typical 2.9% processor.
Pricing Cards
Three rounded plan cards with emoji (Sprout, Bloom, Forest), a pill monthly/yearly toggle, mint tick lists, and the featured plan filled in lavender with a tilted butter “Most loved” sticker.
Pricing Compare
Rounded comparison table inside a white card: soft zebra rows, round mint check and grey dash badges, and a lavender featured column with rounded head.
Pricing Duo
Two big plan blocks side by side: a mint “Free” block and a periwinkle “Pro” block with light text, huge rounded prices, round-tick feature lists and contrasting pill CTAs.
Pricing Team
Team-size price calculator: big round −/+ stepper around an editable number, avatar dots popping in for each person (paid seats ringed), and a butter summary card with the live monthly total.