Clarity before decoration
Content leads. Every visual decision should make an idea easier to understand, navigate or remember.
Design language · 2027
The TEDxEleusis system is editorial, architectural and direct. It gives every idea room to speak while making the whole event unmistakably ours.
The system is intentionally restrained. These principles help us decide when to stay quiet and when a moment has earned more energy.
Content leads. Every visual decision should make an idea easier to understand, navigate or remember.
Consistent grids, borders and spacing give many kinds of content one recognizable TEDxEleusis frame.
Quiet neutral pages make black panels, red accents and expressive imagery feel deliberate rather than constant.
Interaction confirms state, reveals hierarchy and supports orientation. It never competes with the speaker or idea.
Typography
The sans face carries ideas with warmth and clarity. Monospace labels provide orientation, metadata and a subtle institutional voice.
Display · 72
Ideas change how we see.
Utility · 12
Eleusis · May 2027 · Ideas worth spreading
Paper and ink do most of the work. TEDx red identifies ownership. Blue and richer gradients appear only when the experience needs a signal or a shift in energy.
Paper
#FAFAFA
Ink
#000000
TEDx red
#E62B1E
Signal blue
#0057FF
Structure
The outer rails connect pages. Internal rules create rhythm without filling the interface with cards, shadows or decorative containers.
Space is an active part of the identity.

Expressive moments
Dithered gradients and saturated colour mark high-value moments—tickets, key announcements and transitions—without becoming visual wallpaper.
UI in practice
These compositions show how the system moves from principles into useful moments across discovery, planning and conversion.
The same speaker content shown in every supported layout.

Urban researcher and educator

Urban researcher and educator
View profile →Both variants below receive the same complete sessions. Timeline exposes schedule data; directory prioritises titles and people.
10:30
Saturday, 18 September
Main stage · 45 min
A conversation about memory, civic space and the futures cities choose to build.
Alexandra Markou (Urban researcher)
11:20
Saturday, 18 September
Main stage · 20 min
How architecture can retain the traces of a place while making room for new uses.
Nikos Pappas (Architect)
Title
Speakers
Alexandra Markou (Urban researcher)
Nikos Pappas (Architect)
Standard and featured stories share the same metadata order: date, title, summary, then action.
Ticket release
A full day of talks, performances and conversations at the IRIS Cultural Center.
Get ticketsLarge tap targets, explicit labels and strong dividers make the hierarchy obvious without relying on decorative icons.
Across the ecosystem
The event site creates urgency around one gathering. The hub gives talks and stories a longer life. Shared rules make both experiences feel related without making them identical.
Society
Eleni Markou
Eleusis · 2027
Hub · Community CTA
A focused conversion pattern for volunteering, partnerships or newsletter participation.
Join the teamShared components
The package turns the principles into reusable behavior: square geometry, clear labels, visible focus and predictable spacing.
Developer handoff
Start with the composed components. Reach for primitives only when the product genuinely needs a new composition. Every public export and option is listed below; examples stay folded away until needed.
01
Link workspace package
02
Load tokens and source
03
Import by name
// package.json
"@tedxeleusis/ui": "workspace:*"
/* global.css */
@source "../../../../packages/ui/src";
@import "@tedxeleusis/ui/styles";
---
import { Button } from "@tedxeleusis/ui";
---Page width, orientation and shared site chrome.
import { Container } from "@tedxeleusis/ui";
<Container as="main" size="narrow">...</Container>import { ContentFrame } from "@tedxeleusis/ui";
<ContentFrame as="main" class="py-20">...</ContentFrame>import { MonoLabel } from "@tedxeleusis/ui";
<MonoLabel as="p" muted>Session · 10:30</MonoLabel>import { SkipLink } from "@tedxeleusis/ui";
<SkipLink />import { SiteNavigation } from "@tedxeleusis/ui";
<SiteNavigation
id="event-navigation"
items={[{ label: "Speakers", href: "/speakers", active: true }]}
action={{ label: "Tickets", href: "/tickets" }}
/>import { SiteFooter } from "@tedxeleusis/ui";
<SiteFooter links={[{ label: "About", href: "/about" }]} />Reusable editorial and conversion patterns.
import { ActionCallout } from "@tedxeleusis/ui";
<ActionCallout
eyebrow="Ticket release"
title="Early-bird tickets"
description="Registration opens soon."
backgroundImage={campaignImage}
actionLabel="Tickets coming soon"
/>import { AnnouncementBanner } from "@tedxeleusis/ui";
<AnnouncementBanner
id="tickets-live"
message="Tickets are available."
href="/tickets"
variant="brand"
dismissible
/>import { Button } from "@tedxeleusis/ui";
<Button href="/tickets" variant="primary" size="lg">
Get tickets
</Button>import { JournalCard } from "@tedxeleusis/ui";
<JournalCard
title="A city shaped by memory"
date="May 18, 2027"
image={heroImage}
variant="featured"
href="/blog/a-city-shaped-by-memory"
/>import { PersonCard } from "@tedxeleusis/ui";
<PersonCard
name="Alexandra Markou"
role="Urban researcher"
image={portrait}
variant="split"
imageTreatment="color"
/>import { SessionList } from "@tedxeleusis/ui";
<SessionList
variant="timeline"
sessions={[{
time: "10:30",
title: "Opening session",
meta: "Main stage · 45 min"
}]}
/>Accessible form structure, controls and state.
import { FormStack } from "@tedxeleusis/ui";
<FormStack as="fieldset" gap="lg">...</FormStack>import { FormField, Input } from "@tedxeleusis/ui";
<FormField label="Email" htmlFor="email" required>
<Input id="email" name="email" type="email" />
</FormField>import { Input } from "@tedxeleusis/ui";
<Input name="email" type="email" autocomplete="email" invalid={false} />import { Textarea } from "@tedxeleusis/ui";
<Textarea name="message" rows="6" />import { Checkbox } from "@tedxeleusis/ui";
<label><Checkbox name="updates" value="yes" /> Updates</label>import { NativeSelect } from "@tedxeleusis/ui";
<NativeSelect name="role">
<option value="volunteer">Volunteer</option>
</NativeSelect>import { Dropdown } from "@tedxeleusis/ui";
<Dropdown
client:load
name="attendance"
groups={[{ options: [{ value: "in-person", label: "In person" }] }]}
/>import {
Select, SelectTrigger, SelectValue,
SelectContent, SelectItem
} from "@tedxeleusis/ui";