israeli-ui-design-system
Israeli UI Design System
Instructions
Step 1: Choose Hebrew Font Pairings
Select font combinations optimized for Hebrew readability and Latin compatibility:
| Pairing | Hebrew Font | Latin Font | Best For | Style |
|---|---|---|---|---|
| Modern Business | Heebo | Inter | SaaS, dashboards, admin panels | Clean, neutral |
| Friendly Startup | Rubik | Source Sans Pro | Consumer apps, marketing sites | Rounded, approachable |
| Government/Formal | Assistant | Roboto | Gov sites, institutional pages | Professional, clear |
| Editorial | Frank Ruhl Libre | Merriweather | Blogs, news, content sites | Serif, literary |
| Minimal | Secular One | Montserrat | Landing pages, portfolios | Bold headlines |
See references/hebrew-typography.md for complete font metrics and loading strategies.
Font loading configuration:
/* Primary: Heebo + Inter pairing */
@import url('https://fonts.googleapis.com/css2?family=Heebo:wght@300;400;500;700&family=Inter:wght@300;400;500;700&display=swap');
:root {
--font-hebrew: 'Heebo', 'Assistant', 'Noto Sans Hebrew', sans-serif;
--font-latin: 'Inter', 'Roboto', sans-serif;
--font-mono: 'Fira Code', 'Source Code Pro', monospace;
}
body {
font-family: var(--font-hebrew), var(--font-latin);
}
Step 2: Hebrew Typography Scale
Hebrew characters are visually larger than Latin at the same font size. Adjust the type scale:
:root {
/* Hebrew-adjusted type scale */
--text-xs: 0.8125rem; /* 13px -- minimum readable Hebrew */
--text-sm: 0.875rem; /* 14px */
--text-base: 1rem; /* 16px -- Hebrew body text minimum */
--text-lg: 1.125rem; /* 18px */
--text-xl: 1.25rem; /* 20px */
--text-2xl: 1.5rem; /* 24px */
--text-3xl: 1.875rem; /* 30px */
--text-4xl: 2.25rem; /* 36px */
/* Hebrew-specific line heights (taller than Latin) */
--leading-tight: 1.4;
--leading-normal: 1.7;
--leading-relaxed: 1.9;
/* NEVER use letter-spacing for Hebrew */
--tracking-hebrew: normal;
/* Slight word spacing improves Hebrew readability */
--word-spacing-hebrew: 0.05em;
}
/* Hebrew body text */
body[dir="rtl"] {
font-size: var(--text-base);
line-height: var(--leading-normal);
letter-spacing: var(--tracking-hebrew);
word-spacing: var(--word-spacing-hebrew);
}
Step 3: RTL-First Component Architecture
Design components with RTL as the default, not an afterthought:
/* RTL-first button component */
.btn {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding-inline: 1.5rem;
padding-block: 0.75rem;
border-radius: 0.375rem;
font-family: var(--font-hebrew), var(--font-latin);
font-weight: 500;
text-align: start;
/* Icon automatically flips in RTL */
}
.btn-icon-start {
flex-direction: row;
/* In RTL: icon appears on the right (start side) */
}
.btn-icon-end {
flex-direction: row-reverse;
/* In RTL: icon appears on the left (end side) */
}
/* RTL-first card component */
.card {
border-radius: 0.5rem;
padding: 1.5rem;
text-align: start;
}
.card-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-block-end: 1rem;
padding-block-end: 1rem;
border-block-end: 1px solid var(--border-color);
}
/* RTL-first sidebar layout */
.layout {
display: grid;
grid-template-columns: 280px 1fr;
/* In RTL: sidebar appears on the right automatically */
}
.layout-sidebar {
border-inline-end: 1px solid var(--border-color);
padding-inline-end: 1.5rem;
}
Step 4: Israeli Color Palette and Design Tokens
:root {
/* Israeli-appropriate color tokens */
--color-primary-50: #eff6ff;
--color-primary-100: #dbeafe;
--color-primary-500: #3b82f6;
--color-primary-600: #2563eb;
--color-primary-700: #1d4ed8;
/* Status colors (universal) */
--color-success: #16a34a;
--color-warning: #d97706;
--color-error: #dc2626;
--color-info: #2563eb;
/* Neutral palette */
--color-gray-50: #f9fafb;
--color-gray-100: #f3f4f6;
--color-gray-200: #e5e7eb;
--color-gray-500: #6b7280;
--color-gray-700: #374151;
--color-gray-900: #111827;
/* Spacing scale */
--space-1: 0.25rem;
--space-2: 0.5rem;
--space-3: 0.75rem;
--space-4: 1rem;
--space-6: 1.5rem;
--space-8: 2rem;
--space-12: 3rem;
/* Border radius */
--radius-sm: 0.25rem;
--radius-md: 0.375rem;
--radius-lg: 0.5rem;
--radius-full: 9999px;
}
Step 5: Gov.il Design Patterns
For government and institutional Israeli websites, follow the gov.il design system:
/* Gov.il inspired header */
.gov-header {
background-color: #1a3a5c;
color: #ffffff;
padding-block: var(--space-4);
padding-inline: var(--space-6);
}
.gov-header-logo {
display: flex;
align-items: center;
gap: var(--space-3);
/* Logo + Hebrew site name, right-aligned in RTL */
}
/* Gov.il form patterns */
.gov-form-group {
margin-block-end: var(--space-6);
}
.gov-label {
display: block;
font-weight: 500;
margin-block-end: var(--space-2);
color: var(--color-gray-700);
}
.gov-input {
inline-size: 100%;
padding: var(--space-3);
border: 1px solid var(--color-gray-200);
border-radius: var(--radius-md);
font-family: var(--font-hebrew), var(--font-latin);
font-size: var(--text-base);
}
.gov-input:focus {
outline: 2px solid var(--color-primary-500);
outline-offset: 2px;
}
/* Gov.il step indicator */
.gov-steps {
display: flex;
gap: var(--space-4);
padding: 0;
list-style: none;
/* In RTL: steps flow right-to-left */
}
.gov-step {
display: flex;
align-items: center;
gap: var(--space-2);
}
.gov-step-number {
display: flex;
align-items: center;
justify-content: center;
inline-size: 2rem;
block-size: 2rem;
border-radius: var(--radius-full);
background-color: var(--color-primary-500);
color: #ffffff;
font-weight: 700;
}
Step 6: RTL-First Form Patterns
<!-- Israeli address form -->
<form dir="rtl" lang="he">
<fieldset>
<legend>כתובת</legend>
<div class="form-group">
<label for="street">רחוב</label>
<input id="street" type="text" dir="rtl">
</div>
<div class="form-row">
<div class="form-group">
<label for="house-num">מספר בית</label>
<input id="house-num" type="text" dir="ltr"
inputmode="numeric" size="6">
</div>
<div class="form-group">
<label for="apartment">דירה</label>
<input id="apartment" type="text" dir="ltr"
inputmode="numeric" size="4">
</div>
</div>
<div class="form-group">
<label for="city">יישוב</label>
<input id="city" type="text" dir="rtl">
</div>
<div class="form-group">
<label for="postal">מיקוד</label>
<input id="postal" type="text" dir="ltr"
inputmode="numeric" pattern="[0-9]{7}"
maxlength="7" size="10">
</div>
</fieldset>
</form>
Step 7: Israeli Formatting Conventions (Currency, Numbers, Dates)
Design tokens and components must encode Israel-specific formatting, not mirror Latin/US defaults.
Currency: shekel sign (₪)
The shekel sign ₪ (U+20AA) is typically placed after the amount in Israeli financial contexts (e.g., 1,234.50 ₪), though ₪ 1,234.50 is also common in retail. Whichever convention you pick, apply it consistently. Because numbers are inherently LTR, any amount inline inside Hebrew RTL text needs explicit bidi isolation or the surrounding punctuation may reorder.
<!-- Correct: isolate the amount so the currency symbol stays put -->
<p>המחיר הוא <bdi>1,234.50 ₪</bdi> בלבד.</p>
// Prefer Intl.NumberFormat over hand-formatting -- it handles symbol placement,
// grouping separators, and invisible RTL marks correctly across browsers.
new Intl.NumberFormat('he-IL', {
style: 'currency',
currency: 'ILS',
}).format(1234.5);
// => "1,234.50 ₪"
Numbers in Hebrew body text
Numbers (phone numbers, ID numbers, prices, dates) do not reverse under RTL. But when a long number sits inside Hebrew text, browsers may reflow surrounding punctuation. Use <bdi> or dir="ltr" on the number element to lock it.
<p>מספר הזהות הוא <bdi>012345678</bdi>, בתוקף עד 2030.</p>
Dates and time
Default to the Israeli convention: DD/MM/YYYY (e.g., 20/04/2026), not US MM/DD/YYYY or ISO YYYY-MM-DD in user-facing copy. Use 24-hour time (14:30); AM/PM is rare in Israeli UIs.
new Intl.DateTimeFormat('he-IL', {
day: '2-digit', month: '2-digit', year: 'numeric',
}).format(new Date());
// => "20.4.2026" or "20/04/2026" depending on browser locale data
Define design tokens so downstream components stay consistent:
:root {
--date-format-short: 'dd/MM/yyyy';
--time-format: 'HH:mm';
--currency-locale: 'he-IL';
--currency-code: 'ILS';
}
Number separators
Thousands separator is comma (1,234,567), decimal is period (1,234.50). Do not switch to European 1.234,50 style; Israeli finance uses the US convention.
Examples
Example 1: Set Up Israeli Design System
User says: "Create a design system for my Israeli SaaS product" Result: Configure Heebo + Inter font pairing, set up Hebrew-adjusted type scale with 16px minimum body text and 1.7 line height, define RTL-first component primitives (button, card, input, sidebar layout) using CSS logical properties, and establish Israeli-appropriate color tokens.
Example 2: Build Hebrew Form Component
User says: "I need a Hebrew address form with proper RTL layout" Result: Create RTL form with Hebrew labels, right-aligned field groups, LTR input direction for numeric fields (house number, postal code, phone), proper fieldset grouping with Hebrew legends, and Israeli-specific field patterns (7-digit postal code, city selector).
Example 3: Implement Gov.il Design Patterns
User says: "My government website needs to match gov.il design standards" Result: Apply gov.il header pattern with institutional blue, Hebrew navigation with RTL flow, step indicators for multi-page forms, accessible form styling with focus indicators, and footer with required government links.
Bundled Resources
References
references/hebrew-typography.md-- Hebrew font catalog with Google Fonts metrics, recommended pairings for different use cases (SaaS, editorial, government), font loading performance strategies, Hebrew-specific CSS properties (line-height, word-spacing, letter-spacing rules), and type scale recommendations for bilingual Hebrew/English interfaces.
Gotchas
- Hebrew text is typically 15-30% shorter than its English equivalent. Agents may design UI layouts with fixed widths based on English text length, causing Hebrew text to have too much whitespace or breaking the layout when switching to English.
- The standard Hebrew web font stack should prioritize system fonts: "Segoe UI", "Rubik", "Heebo", Arial, sans-serif. Agents may use Google Fonts Hebrew fonts without including a fallback, causing FOUT on slow connections.
- Form labels in Hebrew should be right-aligned and placed to the right of inputs (or above them). Agents often place labels to the left of inputs, which is the English convention and feels unnatural in RTL.
- Phone number input fields for Israeli numbers should accept formats with and without country code: 054-1234567, +972-54-1234567, and 0541234567. Agents may only validate the international format.
Reference Links
| Source | URL | What to Check |
|---|---|---|
| Google Fonts – Hebrew | https://fonts.google.com/?subset=hebrew | Heebo, Assistant, Rubik, Frank Ruhl Libre, loading snippets |
| CSS logical properties (MDN) | https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_logical_properties_and_values | padding-inline, margin-block, logical positioning |
| Tailwind RTL support | https://tailwindcss.com/docs/hover-focus-and-other-states#rtl-support | rtl: and ltr: variants for component libraries |
| shadcn/ui | https://ui.shadcn.com | RTL-friendly component recipes and primitives |
| WCAG 2.1 quick reference | https://www.w3.org/WAI/WCAG21/quickref/ | Contrast and reading-order requirements that apply to RTL |
Troubleshooting
Error: "Hebrew text looks cramped or too small"
Cause: Using Latin-optimized font sizes and line heights for Hebrew Solution: Increase base font size to at least 16px for body text. Set line-height to 1.7 minimum for Hebrew. Never apply letter-spacing to Hebrew text. Add slight word-spacing (0.05em) for readability.
Error: "Component layout breaks in RTL"
Cause: Using physical CSS properties (margin-left, padding-right) instead of logical properties Solution: Replace all physical directional properties with logical equivalents: margin-inline-start, padding-inline-end, border-inline-start, inset-inline-start. Use flexbox and grid which automatically respect the dir attribute.
Error: "Icons point in wrong direction in RTL"
Cause: Directional icons (arrows, chevrons, back buttons) not mirrored for RTL
Solution: Mirror directional icons using CSS transform: scaleX(-1) within [dir="rtl"] context. Non-directional icons (search, home, settings) should NOT be mirrored. Create an icon mirroring utility class for consistent application.
More from skills-il/localization
hebrew-rtl-best-practices
Implement right-to-left (RTL) layouts for Hebrew web and mobile applications. Use when user asks about RTL layout, Hebrew text direction, bidirectional (bidi) text, Hebrew CSS, "right to left", or needs to build Hebrew UI. Covers CSS logical properties, Tailwind RTL, React/Next.js RTL setup, Hebrew typography, and font selection. Do NOT use for Arabic RTL (similar but different typography) unless user explicitly asks for shared RTL patterns.
78hebrew-content-writer
Write and edit professional content in Hebrew including marketing copy, UX text, articles, emails, and social media posts. Use when user asks to write in Hebrew, "ktov b'ivrit", create Hebrew marketing content, edit Hebrew text, write Hebrew UX copy, or optimize Hebrew content for SEO. Covers grammar rules, formal vs informal register, gendered language handling, and Hebrew SEO best practices. Do NOT use for Hebrew NLP/ML tasks (use hebrew-nlp-toolkit) or translation (use a translation skill).
26israeli-accessibility-compliance
Implement Israeli web accessibility compliance per IS 5568 standard and WCAG 2.1 AA for Hebrew RTL applications. Use when user asks about Israeli accessibility law, "negishot" (accessibility), IS 5568, "teken negishot" (accessibility standard), "nachim" (disabilities), Hebrew screen reader support, RTL ARIA patterns, or accessibility audit for Israeli websites. Covers mandatory legal requirements under the Equal Rights for Persons with Disabilities Act, Hebrew screen reader compatibility (NVDA, JAWS, VoiceOver), RTL-specific ARIA patterns, and penalties for non-compliance. Do NOT use for general WCAG guidance without Israeli context (use standard a11y resources instead).
24hebrew-tailwind-preset
Configure Tailwind CSS v4 for Hebrew RTL applications with dir variants, Hebrew font stacks, and logical property utilities. Use when user asks about Tailwind RTL setup, Hebrew Tailwind config, "Tailwind ivrit" (Hebrew Tailwind), RTL utility classes, logical properties in Tailwind, ms-/me- utilities, or Tailwind Hebrew font configuration. Covers Tailwind v4 dir variants, Hebrew font stack presets, logical property utilities (ms-/me-/ps-/pe- instead of ml-/mr-/pl-/pr-), RTL-first component patterns, and Hebrew typography tokens. Do NOT use for general CSS RTL patterns (use hebrew-rtl-best-practices) or full design systems (use israeli-ui-design-system instead).
21hebrew-document-generator
Generate professional Hebrew documents including PDF, DOCX, and PPTX with full RTL support and proper Hebrew typography. Use when user asks to create Hebrew PDF, generate Israeli business documents, "lehafik heshbonit", "litstor hozeh", build Hebrew Word document, create Hebrew PowerPoint, or produce Israeli templates such as Heshbonit Mas (tax invoice), Hozeh (contract), Hatza'at Mechir (proposal), or Protokol (meeting minutes). Covers reportlab, WeasyPrint, python-docx, and pptxgenjs with bidi paragraph support. Do NOT use for OCR or reading existing documents (use hebrew-ocr-forms instead).
19shabbat-aware-scheduler
Schedule meetings, deployments, and events respecting Shabbat, Israeli holidays (chagim), and Hebrew calendar constraints. Use when user asks to schedule around Shabbat, "zmanim", check Israeli holidays, plan around chagim, set Israeli business hours, or needs Hebrew calendar-aware scheduling logic. Includes halachic times (zmanim) via HebCal API, full Israeli holiday calendar, and Israeli business hour conventions. Do NOT use for religious halachic rulings (consult a rabbi) or diaspora 2-day holiday scheduling.
18