---
name: hebrew-web-typography
description: Hebrew web typography rules, RTL conventions, and design principles for building high-quality Hebrew websites. Use this skill whenever working on Hebrew/RTL typography — setting font sizes, line-height, spacing, emphasis, bidirectional text, type scale, structuring/chunking Hebrew running text, or auditing typography in Hebrew web projects. Also trigger when the user asks about Hebrew fonts, RTL layout rules, optical balance, fixing dense "wall of text" Hebrew paragraphs, or typographic hierarchy for Hebrew sites. This skill is a reference companion to hebrew-site-builder and design-taste-frontend — always consult it when those skills are active on Hebrew projects.
---

# Hebrew Web Typography

A reference skill for making correct, high-quality typographic decisions on Hebrew RTL websites. Covers rules that differ from Latin/English typography, structure and chunking of running text, font recommendations, type scale systems, emphasis conventions, bidirectional text handling, spacing, and optical balance principles.

---

## 1. HEBREW-SPECIFIC TYPOGRAPHY RULES

These rules override standard Latin typography conventions. Hebrew script has fundamentally different structural properties that demand different treatment.

### Font Size
- **Minimum body font size: 18px.** Hebrew glyphs are visually smaller than Latin at the same pixel size due to different x-height proportions.
- **Navigation items: 16–18px** (larger than English's typical 14–16px).
- Use `clamp()` for all font sizes — never hardcode px or rem values.
- **Mixed Hebrew/Latin slots — share the leading, not the size.** When Hebrew and Latin share a role (bilingual templates, EN/HE twins, an English term inside a Hebrew line), set the Hebrew **+5–10% larger** (up to +14% on display, as little as +3% on small meta) and hold the *pixel leading* constant on body blocks so the baseline rhythm doesn't shift between languages. Hebrew has no ascenders/descenders or caps, so it reads optically smaller than Latin at equal px — size it up to match. **Calibrate the exact % on the REAL fonts, by eye** — a stand-in face mis-states it (e.g. RecStudio's Heebo-beside-Metropolis lands at Latin 0.95em = Hebrew +5%, tuned on real Metropolis, not the calculator's guess).

### Line Height
- **Running/long-form body text: 1.7–1.8** (English typically uses 1.4–1.5). 1.7 is the floor for any Hebrew text a reader moves *through* — guides, articles, multi-paragraph sections; push toward 1.8 for marketing/landing pages where air matters more than density. Hebrew needs more vertical breathing room than Latin.
- **Short editorial bursts (1–3 rendered lines, ≥22px): 1.25–1.4 is legitimate.** A single statement or project-blurb is display-adjacent, not reading text — solid-ish leading makes it a typographic object. The moment text runs past ~3 lines, or the reader must *read on*, the 1.7 floor applies. (Field: Dov Abramson ships running Hebrew at 1.23–1.3, but only on single-blurb / short-paragraph pages — bursts, never long-form.)
- **Headings: 1.2–1.3** for tight, impactful display.
- **Display/decorative text — by size band:** ~40–70px → 1.1–1.2 · 70–95px section-head display → 1.15–1.25 · **≥95px-class statement/hero → 1.0–1.1 (solid-set is shippable, even multi-line Hebrew).** Below ~70px, never 1.0.
- Base vertical rhythm on Hebrew body line-height (e.g., 18px × 1.7 ≈ 30.6px, round to 32px on the 8px grid). All margins, paddings, and component spacing should derive from this unit or its multiples.

### Letter-Spacing (Tracking)
- **Body text: NEVER add letter-spacing.** Hebrew letterforms are calibrated by the type designer at their native spacing. Tracking disrupts reading rhythm.
- **Emphasis exception:** The W3C Hebrew Layout Requirements states that Hebrew uses letter-spacing to emphasize or highlight text — names, concepts, terms. This is a legitimate Hebrew convention (analogous to German Blackletter *sperren*). Single terms only — never a phrase, never a paragraph.
- **Large display headings — negative tracking scales with size.** -0.01…-0.02em from ~50px; up to **-0.03…-0.05em at 100px-class** display. Hebrew display tolerates *tighter* tracking than Latin at the same size — but the tolerance is font-specific: calibrate by eye per family (a value tuned on one face does not transfer). Visible Hebrew display is always tracked negative or zero — **never positive**.
- **List-row air:** short link / list / index rows (nav-like rows, credit lists, chips — one line, not prose) may take slight POSITIVE tracking, ~+0.03…+0.04em, to air out a dense stack of short Hebrew items. Never on paragraphs, never on display.

### Word-Spacing (the legitimate "air" axis)
- **Word-spacing — not letter-spacing — is how Hebrew gets air.** Hebrew justification stretches word spaces only (never letter spaces), and the same logic applies to manual adjustments: a slight positive `word-spacing` (up to ~0.05em) can relieve dense display or marketing text.
- Use it sparingly, on short display/marketing blocks — not as a default on body text.
- **If a block needs more relief than word-spacing gives, the problem is structural, not spacing** — see §2 Structure & Chunking.

### Emphasis
Hebrew's emphasis hierarchy (documented by Michal Sahar, Typotheque):
1. **Bold weight** (primary — always use this first)
2. **Ink-value step** (demote the surrounding text to a muted/faint token, then snap ONE word back to full ink + bold — the gray→black+700 beat; in Hebrew, *value* does the job italic does in Latin. One beat per paragraph.)
3. **Different typeface** (a brand-level move — body↔heading font; master practice runs one family per script and switches only per-language, not per-paragraph)
4. **Letter-spacing** (for highlighting specific terms)
5. **Underlining**
6. **Color change** (hue — last resort; *value* is #2)

**NEVER use italic for Hebrew text.** Hebrew typography considers slanted/italic fonts controversial. Bold replaces italic entirely.

> **The ink-value step is one rung of the 3-level ladder → full rule in [§1.5 Text Hierarchy](#15--text-hierarchy--the-three-axes-size--weight--ink-value).** Short version: a light ramp does NOT survive a hex-inversion to dark — pure `#fff` halates, so the dark lane uses an off-white anchor (`#e6edf3`) on a not-quite-black bg (`#1a1b1d`). §1.5 has both presets, the halation rule, and the live ink-ramps widget.

### Case & Capitalization
- **Hebrew is unicameral** — no uppercase or lowercase letters.
- This eliminates: small-caps, ALL CAPS transformations, text-transform: uppercase, and case-based hierarchy.
- Visual hierarchy must come entirely from: size, weight, typeface contrast, and color.
- Hierarchy must therefore come from size, weight, and **ink value** first. Typeface switching is a *brand-level* tool (display face vs body face), not a paragraph-level one — a single Hebrew family with two well-chosen weights can carry an entire site's hierarchy.

### Paragraph Treatment
- **Space-between, not indentation.** Hebrew web convention uses vertical space between paragraphs rather than first-line indentation.
- Never use both spacing and indentation together (Bringhurst/Butterick rule).
- For running text longer than a few lines, structure beats styling — see §2 Structure & Chunking.

### Text Alignment
- **Use `text-align: start`** (resolves to right-alignment in RTL) with ragged-left edges.
- **Avoid justified text on the web.** Hebrew justification adjusts only word-spacing (never letter-spacing), but browser support remains inconsistent.

### Content Width
- **Max-width ~40rem is the ceiling for Hebrew body text containers** — marketing/landing text reads best narrower, around 30–38rem.
- Hebrew line length guidance: roughly 45–75 characters per line, same principle as Latin but Hebrew words tend to be shorter, so the character count may differ.

---

## 1.5 · TEXT HIERARCHY — the three axes (size · weight · ink-value)

Hebrew is unicameral (no caps) and bans italic, so hierarchy **can't** lean on case or slant the way Latin does. It runs on **three axes — size, weight, ink-value** (typeface-switch is a brand-level fourth, per-language, never per-paragraph). Get these three right and one Hebrew family carries a whole site. This is the consolidated rule; §1 Emphasis, §5 Type Scale, and §7 Visual Weight hold the per-axis detail.

**The three axes**
1. **Size** — the loudest signal. Content systems → the §5 scale (1.25 ratio). Brand / cover / poster surfaces → the **two-scale page law** (one giant + one tiny, **4–6× apart, nothing mid-scale**). Hebrew needs *more* size contrast than Latin — there's no case to help.
2. **Weight** — 400 body / 700 emphasis. The primary emphasis tool (it replaces italic). Two weights of one family can carry a whole hierarchy.
3. **Ink-value (tone)** — the **3-level ladder: anchor → mid → faint**. This layers a body *without* changing size. (Lineage: Material 87/60/38% white · Apple label/secondary/tertiary · GitHub Primer.)

**The 3-level ink ladder**
| Level | Role | Emphasis move |
|---|---|---|
| **anchor** | loudest text — headline, the one emphasized word | body sits at mid → snap ONE word here + weight 700 (the gray→black+700 beat — *value does italic's job*). One beat per paragraph. |
| **mid** | body / running text lives here | — |
| **faint** | meta, captions, source / footnote lines | — |

**Light vs dark — RE-TUNE, never hex-invert** (the load-bearing rule)
A dark ramp is **not** the light ramp flipped. Pure white `#fff` on dark **halates** — it glows/bleeds and blurs the glyph edges; and a naive inversion sinks the faint level into the background. So on dark: **not-quite-black background + not-quite-white anchor.**

| Lane | bg | anchor | mid | faint |
|---|---|---|---|---|
| **Light** | `#ffffff` | `#1a1b1d` | `#7f7f7f` | `#c1c1c1` |
| **Dark (Bots)** | `#1a1b1d` | `#e6edf3` | `#8b949e` | `#6e7681` |

Dark-lane values are GitHub Primer. **Anchor is off-white (`#e6edf3`), never `#fff`.** WCAG-on-dark: anchor ≈ AAA, mid ≈ AA, faint often dips below AA — **fine for meta, never for body.**

**Tune & verify live:** the interactive **ink-ramps widget** (in recstudio-content: `lab/design-widgets/ink-ramps/`) ships both presets, a live WCAG ratio per level, and a **halation flag** that fires when the anchor gets too close to pure white on dark. "Copy CSS" emits the three vars — use it to pick or sanity-check a ramp instead of guessing hexes.

### Deriving a ramp for ANY background (not just the two presets)
The presets cover white and the Bots near-black. For **any other surface** — a colored lane, a photo panel, a client's brand color — *derive* the ramp; don't guess hexes. The method (verified against the field's tooling):

1. **Hierarchy is stepped LUMINANCE CONTRAST, not hue.** The three levels are three *contrast targets* against the bg. Hue only makes the text feel like it belongs to the surface — it never carries the hierarchy. So you solve for three tones, then tint them.
2. **The three contrast targets, in APCA** (font-size/weight-aware — the right tool; WCAG is the legal floor, *not* the design target): anchor **Lc ≈ 90** · mid/body **Lc ≈ 75** · faint/meta **Lc ≈ 45–60** (below body is fine for meta, **never** for body).
3. **Solve in a PERCEPTUAL space — OKLCH or CAM02 — never HSL.** Step the three levels along OKLCH's **L** axis: it's perceptually even, so equal L steps read as equal tonal steps (HSL's "lightness" lies — equal HSL steps look uneven). Don't eyeball hexes; let the space do the spacing. As a starting point the presets sit at roughly OKLCH L: dark-lane anchor ≈ 0.93 · mid ≈ 0.65 · faint ≈ 0.52; light-lane anchor ≈ 0.20 · mid ≈ 0.56 · faint ≈ 0.80.
4. **Tint the neutrals toward the bg's hue, at LOW chroma (~0.01–0.02 — a hint, not saturation).** Pure grey looks dead on a colored surface; a faint tint of the surface hue makes the text feel *part of* the panel (Refactoring UI "tinted greys", Radix "tinted palettes"). On a blue bg → cool, blue-tinted off-whites and slates. On neutral bg, chroma → ~0 (plain grey).
5. **Halation cap — the load-bearing rule.** On any dark **or colored** surface, never push the anchor to pure `#fff` — back it off to an off-white (cap OKLCH L ≈ 0.93). Pure white halates: it glows, bleeds, and blurs the glyph edges. `#e6edf3` on `#1a1b1d` is exactly this rule already applied.
6. **Verify each level's contrast against the bg** (APCA, with WCAG as the floor) and nudge L until anchor / mid / faint each clear their target.

**Tools that do this for you — feed bg + contrasts, get hexes:**
- **Adobe Leonardo** — open source `@adobe/leonardo-contrast-colors`; `generateContrastColors({ colorKeys, base, ratios })` takes a background + target contrast ratios and returns the hexes. ([github.com/adobe/leonardo](https://github.com/adobe/leonardo))
- **APCA** — the contrast model the targets above are stated in ([apcacontrast.com](https://apcacontrast.com)).
- **OKLCH + APCA generators** — pick/step tones perceptually and read APCA live ([inclusivecolors.com](https://inclusivecolors.com)).
- Background reading: Refactoring UI *"Building your color palette"* (tinted greys) · Radix *"Composing a palette."*

**Why it's non-negotiable in Hebrew:** with no uppercase, no small-caps, and no italic, *value* and *size* are most of what you've got. A flat-tone Hebrew block reads as a wall even at perfect line-height — the fix is hierarchy (size + the ink ladder) plus structure (§2), not more leading.

---

## 2. STRUCTURE & CHUNKING — THE MONOLITH FIX

The single highest-leverage rule on Hebrew marketing and content pages. Hebrew is unicameral and has no italic: in Latin text, italics and case variation create relief *inside* a paragraph, but a Hebrew paragraph is one uniform texture. A long block reads as a wall — even with perfect line-height — and readers feel it before they can name it. **Relief in Hebrew must come from structure, not styling.**

### The failure mode: the monolith
A paragraph of 4+ rendered lines, often justified, often tight leading. The font is fine, the colors are fine — the text just feels dense, tiring, unprofessional. Adjusting line-height alone will NOT fix it.

### The rules
1. **Lead-in line.** Open a text block with a short lead-in (one idea, ideally one rendered line) set one step up: one type-scale step larger and/or weight 600. It gives the eye an entry point before the running text.
2. **Beats of 2–4 lines.** Split running text into chunks ("beats") of 2–4 rendered lines, one idea per beat, separated by clear vertical space (0.75–1em minimum). No beat runs past ~4 lines without relief — a break, a subhead, or a pull-line.
3. **Hierarchy from blocks.** Subheads + whitespace do for Hebrew what italics and caps do for Latin. When a section feels flat, add structure — don't reach for styling.
4. **One emphasis per beat.** At most one bold term per chunk (or one letter-spaced term, per the W3C-documented Hebrew highlight convention). Two emphases in one beat cancel each other out.
5. **Narrow the measure.** Chunked Hebrew text reads best at ~30–38rem. A wide measure undoes the chunking.
6. **Air = word-space + line-space.** Never letter-spacing on running text (see §1).

### Before/after recipe — fixing a monolith
1. Extract the first sentence → make it the lead-in (size/weight one step up).
2. Split the rest at idea boundaries into 2–4-line beats with whitespace between them.
3. Set line-height 1.7–1.8; `text-align: start`, ragged — never justified.
4. Narrow the measure to ~30–38rem.
5. Bold the single load-bearing term — max one per beat. Kill any italic.

### CSS sketch
```css
.block { max-inline-size: 36rem; }
.lead  { font-size: 1.2em; font-weight: 600; line-height: 1.5; margin-block-end: .75em; }
.beat  { line-height: 1.75; margin-block-end: 1em; }
.beat b { font-weight: 700; } /* one per beat, maximum */
```

### Exemplars
The Israeli cultural-institution sites in §10 (Tel Aviv Museum of Art especially) are built almost entirely from this pattern: short modular text blocks, generous whitespace, hierarchy from structure rather than styling.

---

## 3. NAVIGATION TYPOGRAPHY (Hebrew Without Nikud)

Comprehensive decision guide for Hebrew navigation bars. Modern Hebrew web uses כתיב מלא (full spelling without nikud) — this affects word length, spacing, and layout decisions.

### Font Choice for Nav Links
- **Use the heading font** (e.g., Alef) when: the site is brand-heavy, the nav has ≤5 items, the heading font is clean and geometric, and you want the nav to feel like part of the brand identity.
- **Use the body font** (e.g., Heebo) when: the site is content-heavy, the nav has 6+ items, readability at small sizes matters more than brand expression, or the heading font is decorative/serif.
- **Never use the display/decorative font** for navigation text (like Ellinia CLM, Suez One) — it's for hero headlines only.
- **Decision rule:** Can you read the font comfortably at 16px with just a quick glance? If yes → use it for nav. If you need to "study" the letterforms → too decorative for nav.
- **Hebrew-specific reason:** Without nikud, Hebrew letters are visually denser — fewer internal white spaces than Latin. A clean sans-serif keeps nav items scannable; serif or decorative Hebrew fonts at nav sizes (16–18px) lose clarity fast.

### Font Size
- **Desktop nav links: 16–18px.** Hebrew glyphs are visually smaller than Latin at the same pixel height — English nav at 14px feels equivalent to Hebrew at 16–17px. Start at 16px; if it feels tight or hard to scan, go to 17–18px.
- **Sticky/scrolled nav:** Reduce by 1–2px maximum (e.g., 17px → 15–16px). Never go below 15px for Hebrew nav text. The shrink should feel subtle — if users notice the text got smaller, you've shrunk too much.
- **Mobile drawer/hamburger menu links: 18–22px.** Larger than desktop because the drawer is a full interaction context, not a persistent bar. Secondary drawer items (social links, language toggle, legal): 14–16px.
- **Sub-nav / dropdown items: 14–16px.** One step smaller than primary nav, creating clear hierarchy. Maintain consistent weight.
- **All sizes must use `clamp()` or your type scale tokens** — never hardcode px.

### Font Weight & States
Hebrew has no italic, so all state differentiation must use weight, color, or indicators:

| State | Weight | Styling |
|-------|--------|---------|
| **Inactive** | 400 (regular) | Base text color |
| **Hover** | 400 — **no weight change** | Accent color, underline, or background shift |
| **Active (current page)** | 600–700 (bold) | Accent color + indicator (underline, dot, or background) |
| **Focused (keyboard)** | Same as hover | Visible focus ring (accessibility requirement) |

- **Never change weight on hover** — it causes layout shift as Hebrew characters change width. Hebrew without nikud has no ascender/descender variety like Latin; all letters sit in a more uniform rectangle, so the width-shift is more noticeable and jarring than in English.
- **Recommended hover effects for Hebrew:**
  1. Underline with offset — clean, universal. Use `text-underline-offset: 4px–6px` to prevent collision with Hebrew descenders (ק, ן, ף, ך, ץ).
  2. Background highlight (subtle, e.g., 8% opacity of accent color)
  3. Color change (to accent color)
  4. Bottom border / animated underline
  5. Opacity change (100% → 80%, subtle)
- **Use at least 2 differentiators for the active state** — weight alone isn't always enough. Combine bold + accent color, or bold + underline.
- **NEVER use italic** for any nav state. Not hover, not active, not disabled.
- **Width-shift prevention** for the active item's bold weight:
```css
/* Reserve the bold width so the active state doesn't shift siblings */
nav a::before {
  content: attr(data-text);
  font-weight: 700;
  height: 0;
  overflow: hidden;
  visibility: hidden;
  display: block;
}
```
Or with variable fonts, animate `font-variation-settings` instead of `font-weight` for smoother transitions.

### Spacing Between Nav Links
Use the 8px grid system. All spacing values must be multiples of 8:

- **Gap between nav links: 24px–40px (3–5 grid units).** Start with 32px (`gap-8` in Tailwind). Increase to 40px if items are short, decrease to 24px if items are long.
- **Internal padding on each link: 8px–16px vertical, 12px–16px horizontal.** This creates a comfortable hit area (minimum 44×44px touch target per WCAG).
- **Use `gap` on the flex container**, not margins on individual items — cleaner and easier to maintain.
- **Test with your actual Hebrew labels — don't estimate from English.** "צור קשר" is wider than "Contact"; "אודות" is narrower than "About Us". Compound terms with spaces take significantly more horizontal space than single-word English equivalents.

```
Label widths to plan around:
Short:    בית | בלוג | אודות | שירותים
Medium:   תיק עבודות | השירותים שלנו | מי אנחנו
Long:     צור קשר | שאלות נפוצות | תנאי שימוש | המלצות לקוחות
```
Plan your spacing around your longest label. If one item is significantly longer, consider abbreviating it or restructuring the information architecture.

```css
/* Hebrew nav spacing — 8px grid */
nav {
  display: flex;
  align-items: center;
  gap: 32px; /* 4 grid units between links */
}

nav a {
  padding: 8px 16px; /* comfortable hit area */
  font-size: clamp(0.9rem, 0.85rem + 0.25vw, 1.063rem); /* ~15–17px */
  font-weight: 400;
  line-height: 1.3;
  text-decoration: none;
  transition: color 0.2s;
}

nav a:hover {
  color: var(--accent);
}

nav a[aria-current="page"] {
  font-weight: 700;
  color: var(--accent);
}
```

### How Many Nav Items?
- **Desktop: 5–7 items maximum** in the horizontal bar. Hebrew words tend to be wider, so you'll hit the space limit sooner than with English. With a CTA button: 4–6 text links + 1 CTA.
- **If you have 7+ items:** Move less critical items into a dropdown (labeled "עוד" — "More"), use a mega-menu pattern, or split into primary/secondary nav tiers.
- **Calculating if items fit** — for a 1200px max-width container with logo (150px) and CTA button (120px):
  - Available space for links: ~930px
  - Average Hebrew nav item (word + padding): ~120–150px
  - Maximum items that fit comfortably: 6–7
  - Test at 1024px viewport too — that's where items start to crowd.

| Hebrew Label | Characters | English Equivalent |
|-------------|-----------|-------------------|
| בית | 3 | Home |
| אודות | 5 | About |
| שירותים | 7 | Services |
| תיק עבודות | 9 (with space) | Portfolio |
| צור קשר | 7 (with space) | Contact |
| המלצות | 6 | Testimonials |
| שאלות נפוצות | 11 (with space) | FAQ |
| הזמינו פגישה | 11 (with space) | Book a Meeting |

### Label Abbreviation
- **Never abbreviate Hebrew days/months in navigation.** Unlike English where "Mon" or "Jan" are standard, Hebrew abbreviation conventions are less universal and can feel awkward or unclear to readers.
- **Prefer single-word labels when possible.** "אודותינו" (About Us) can become "אודות" (About). "צרו קשר" (Contact Us) can become "קשר" (Contact) — but only if the context is obvious.
- **If a label is too long, rewrite it** — don't truncate with "..." in navigation. Ellipsis in nav is a UX failure.

### Active State Indicators
Since Hebrew has no uppercase/lowercase, and italic is banned, the active-state toolkit is:

1. **Weight change** (400 → 700) — most common; reserve the width (see above) to avoid shift
2. **Color change** — accent color for active item
3. **Bottom border/underline** — 2–3px solid, accent color, with 4–8px offset from text
4. **Background pill** — subtle rounded background behind active item
5. **Combination** — weight + underline or color + underline

**Best practice for Hebrew:** Use **color + bottom border** rather than weight alone — it avoids the width-shift problem entirely (there's no case variation to absorb the visual change).

### Sticky/Scrolled Nav Behavior
```
INITIAL STATE (top of page):
├── Nav height: 72–88px (Hebrew needs slightly more vertical space)
├── Logo: full size
├── Link font-size: 17px
├── Link padding: 8px 16px
└── Gap between links: 32px

SCROLLED STATE (after ~100px scroll):
├── Nav height: 56–64px
├── Logo: scaled to ~70–80%
├── Link font-size: 15–16px
├── Link padding: 6px 12px
└── Gap between links: 24px
```

- **Transition duration: 200–400ms** with `ease-out` or a custom cubic-bezier. Add subtle shadow or backdrop-blur to separate from content.
- **Animate padding and gap, not font-size directly** — font-size transitions cause text reflow jank. Instead, use CSS `transform: scale()` on the nav container for smoother resizing.
- **What NOT to do when sticky:** don't hide nav items on scroll (unless mobile) · don't change the font family · don't reduce link size below 15px · don't add letter-spacing to compensate for smaller size.

### Mobile Navigation
- **Hamburger icon: top-left** (in RTL the logo takes the top-right corner; the menu/action side is the left).
- **Drawer opens from the left** — the same physical side as the hamburger.
- **Drawer background: solid color** (not transparent). Hebrew text needs contrast.
- **Mobile nav link size: 18–22px**, weight 500 (medium) — slightly bolder than desktop to compensate for touch context. Full-width tap targets, 48–56px per link minimum.
- **Active state indicator: inline-start border** (appears on the right side in RTL, which is the leading edge).
- **Sub-items:** indent 16–24px from parent, reduce size by 2px.
- **Include a visible close button** (×) — top-left corner, minimum 48×48px tap target. Don't rely only on overlay tap to close.
- **Stack nav links vertically with `text-align: start`** (resolves to right-aligned in RTL).

**Mobile drawer structure for Hebrew sites:**
```
[× close]

ראשי                    ← Primary nav, 20px, weight 700 if active
אודות
שירותים
  → ייעוץ אישי          ← Sub-items, 18px, indented
  → סדנאות
תיק עבודות
בלוג

─────────────────────    ← Divider

צור קשר                 ← Secondary items, 16px
תנאי שימוש
נגישות

🌐 English              ← Language toggle, 14–16px
```

### Breadcrumbs
- Align to the right (start) in RTL.
- Separator: use `‹` not `›` (mirrors the LTR chevron direction).
- Font size: 13–14px (smaller than body — fine for breadcrumbs since they're short reference text).
- Use the body font, weight 400.
- Current page in breadcrumb: weight 600, no link.

### Language Toggle
For bilingual Hebrew/English sites:
- Place the toggle at the inline-end of the nav (leftmost position in RTL).
- Label: "English" or "EN" (not a flag icon — flags represent countries, not languages).
- In Hebrew nav: use "עב" or "עברית" for the Hebrew side.
- Font size: same as nav links or slightly smaller (14–16px).

### CTA Button in Nav
If your nav includes a call-to-action button (like "הזמינו פגישה" or "התחילו עכשיו"):

- **Place it at the inline-end of the nav** (left side in RTL — the terminal position where the eye lands last, before the language toggle if present).
- **Visually separate it** from nav links with a filled background + border-radius (pill for friendly, 8px for professional).
- **Text: short** — 2–3 Hebrew words max.
- **Font size: same as nav links or 1px smaller.** Never larger — it shouldn't overpower the navigation.
- **Font weight: 500 (medium).** The filled background already draws attention; the text doesn't need to be bold.
- **Min-width: 120px** to prevent the button from looking cramped with short Hebrew text.
- **Padding: generous horizontal (20–28px)** — Hebrew CTA text tends to be wider than English equivalents.

### Nav with Mixed Hebrew-English
Common in Israeli sites (brand names, English terms):

- **Don't abbreviate the English.** "Portfolio" stays "Portfolio," not "Port."
- **Wrap English nav labels in `<span dir="ltr">`** if they sit among Hebrew links, though single-word English items usually render fine without explicit direction.
- **Match font rendering:** If your Hebrew font has a Latin companion (Heebo includes Latin), use the same font for both. Mixing fonts between Hebrew and English nav items creates visual inconsistency.
- **Font size stays the same** for English labels — don't upsize or downsize relative to Hebrew items.

### Accessibility Checklist for Hebrew Nav
```
1. ☐ <nav> element with aria-label="ניווט ראשי" (main navigation)
2. ☐ Current page marked with aria-current="page"
3. ☐ Focus ring visible on all links (minimum 2px, contrasting color)
4. ☐ Touch targets minimum 44×44px (WCAG 2.1 SC 2.5.5)
5. ☐ Skip navigation link: "דלגו לתוכן" (Skip to content) as first focusable element
6. ☐ Mobile hamburger has aria-label="תפריט" and aria-expanded state
7. ☐ Keyboard navigation works correctly in RTL order (Tab moves right-to-left through links)
8. ☐ Dropdown menus announced by screen readers with aria-haspopup
```

### Complete Tailwind Example (Hebrew RTL Nav)
```tsx
// NavBar.tsx — Hebrew RTL navigation
'use client'
import { useState, useEffect } from 'react'
import Link from 'next/link'
import { usePathname } from 'next/navigation'

const navLinks = [
  { href: '/', label: 'בית' },
  { href: '/about', label: 'אודות' },
  { href: '/services', label: 'שירותים' },
  { href: '/portfolio', label: 'תיק עבודות' },
  { href: '/testimonials', label: 'המלצות' },
  { href: '/contact', label: 'צור קשר' },
]

export function NavBar() {
  const pathname = usePathname()
  const [isScrolled, setIsScrolled] = useState(false)
  const [isMobileOpen, setIsMobileOpen] = useState(false)

  useEffect(() => {
    const handleScroll = () => setIsScrolled(window.scrollY > 80)
    window.addEventListener('scroll', handleScroll, { passive: true })
    return () => window.removeEventListener('scroll', handleScroll)
  }, [])

  return (
    <header
      className={`fixed top-0 inset-x-0 z-50 transition-all duration-300
        ${isScrolled 
          ? 'h-14 bg-bg-primary/95 backdrop-blur-sm shadow-sm' 
          : 'h-20 bg-bg-primary'
        }`}
    >
      <div className="max-w-7xl mx-auto px-4 h-full flex items-center justify-between">
        {/* Logo — inline-start (right in RTL) */}
        <Link href="/" className="font-heading text-xl font-bold">
          לוגו
        </Link>

        {/* Desktop Nav */}
        <nav 
          aria-label="ניווט ראשי"
          className="hidden md:flex items-center gap-8"
        >
          {navLinks.map(({ href, label }) => (
            <Link
              key={href}
              href={href}
              aria-current={pathname === href ? 'page' : undefined}
              className={`font-heading py-2 px-3 transition-colors duration-200
                text-[clamp(0.9rem,0.85rem+0.25vw,1.063rem)]
                ${pathname === href
                  ? 'font-bold text-accent'
                  : 'font-normal text-text-primary hover:text-accent'
                }`}
            >
              {label}
            </Link>
          ))}
          
          {/* CTA Button — inline-end (left in RTL) */}
          <Link
            href="/book"
            className="font-heading font-medium text-sm
              bg-accent text-white px-6 py-2.5 rounded-lg
              hover:bg-accent-hover transition-colors min-w-[120px] text-center"
          >
            הזמינו פגישה
          </Link>
        </nav>

        {/* Mobile hamburger — left side in RTL */}
        <button
          className="md:hidden p-2"
          aria-label="תפריט"
          aria-expanded={isMobileOpen}
          onClick={() => setIsMobileOpen(!isMobileOpen)}
        >
          {/* Hamburger icon */}
          <span className="block w-6 h-0.5 bg-text-primary mb-1.5" />
          <span className="block w-6 h-0.5 bg-text-primary mb-1.5" />
          <span className="block w-6 h-0.5 bg-text-primary" />
        </button>
      </div>

      {/* Mobile Drawer — opens from the left, same side as the hamburger */}
      {isMobileOpen && (
        <nav
          className="md:hidden fixed inset-0 bg-bg-primary z-50 
            flex flex-col items-start pt-20 ps-8 gap-6"
          aria-label="ניווט ראשי"
        >
          <button
            className="absolute top-4 start-4 p-2"
            aria-label="סגור תפריט"
            onClick={() => setIsMobileOpen(false)}
          >
            ✕
          </button>
          {navLinks.map(({ href, label }) => (
            <Link
              key={href}
              href={href}
              aria-current={pathname === href ? 'page' : undefined}
              className={`font-heading text-xl py-3
                ${pathname === href
                  ? 'font-bold text-accent border-e-4 border-accent pe-4'
                  : 'font-medium text-text-primary'
                }`}
              onClick={() => setIsMobileOpen(false)}
            >
              {label}
            </Link>
          ))}
        </nav>
      )}
    </header>
  )
}
```

### Nav Typography Decision Cheat Sheet
```
QUESTION                          → ANSWER FOR HEBREW
─────────────────────────────────────────────────────────
Which font for nav?               → Heading font (if clean sans-serif)
                                     or Body font (if heading is decorative)
What size?                        → 16–18px desktop, 18–22px mobile drawer
What weight?                      → 400 regular, 600–700 for active
Letter-spacing?                   → NEVER on nav text
Italic for active state?          → NEVER
Hover effect?                     → Color/underline, NOT weight change
Gap between items?                → 24–40px (8px grid multiples)
Max items in horizontal bar?      → 5–7 (Hebrew words are wider)
Sticky nav min text size?         → 15px minimum
Mobile hamburger position?        → Top-left (RTL mirror)
CTA button text weight?           → 500 (shape = emphasis)
Breadcrumb separator?             → ‹ (not ›)
```

---

## 4. RTL LAYOUT RULES

### HTML Foundation
```html
<html lang="he" dir="rtl">
```
- Direction is **content**, not presentation. Never rely solely on CSS `direction: rtl`.
- Set `dir="rtl"` on the `<html>` element — this is semantic, not just visual.

### CSS: Logical Properties Only
Use CSS Logical Properties exclusively. Physical properties are banned:

| ❌ Physical (banned)     | ✅ Logical (use this)           |
|--------------------------|----------------------------------|
| `margin-left`            | `margin-inline-start`            |
| `margin-right`           | `margin-inline-end`              |
| `padding-left`           | `padding-inline-start`           |
| `padding-right`          | `padding-inline-end`             |
| `text-align: left`       | `text-align: start`              |
| `text-align: right`      | `text-align: end`                |
| `border-left`            | `border-inline-start`            |
| `border-right`           | `border-inline-end`              |
| `left: / right:`         | `inset-inline-start/end`         |
| `float: left/right`      | Use flexbox instead               |

In Tailwind CSS v4: use `ms-`, `me-`, `ps-`, `pe-` utilities for logical margins/padding.

**Exception — corner chrome:** persistent header/brand marks pinned to a physical corner (a logo that must sit top-left regardless of language) use literal `left:`/`right:` deliberately — `inset-inline-start` would flip them under `dir=rtl`.

### Bidirectional Text (Bidi)
For mixed Hebrew-English content:
- Wrap embedded English/LTR content in `<bdi>` elements to isolate from Unicode Bidirectional Algorithm reordering.
- For inline LTR spans: `<span dir="ltr">`.
- Numbers remain LTR automatically within RTL context.
- For form inputs accepting mixed-language content: `dir="auto"` for automatic direction detection.

### Elements That Must NOT Be Mirrored
- Media playback controls, clocks, numbers
- Logos, non-directional icons (search, settings, star)
- Photographs, embedded LTR text

### Elements That MUST Be Mirrored
- Navigation arrows, progress bars (non-media)
- Directional icons depicting movement
- Text alignment icons, carousels
- Page layout positioning

### Navigation
- Logo moves to **top-right**, hamburger menu to **top-left**.
- Nav weight: regular (400) for inactive items, bold (600–700) for active states.

### Animations in RTL
- **Horizontal animations:** Multiply x values by -1 for RTL (use a `dirMultiplier` variable).
- **Vertical and opacity animations:** No RTL adjustment needed.
- Always include `useReducedMotion` check.

---

## 5. TYPE SCALE SYSTEM

Use a mathematical ratio for consistent typographic hierarchy **on content-heavy sites.** For brand / portfolio surfaces (hero pages, covers, posters), the master-practice alternative is the **two-scale page law**: one giant statement size + one base chrome size, **4–6× apart, with no mid-scale text at all** — the contrast factor IS the hierarchy, and the eye gets exactly one entry point. (Field: Dov Abramson's home = 113.75px statement vs 25px chrome ≈ 4.55×; site-wide visible contrast 4–10×.) Recommended ratios for the content system:

| Ratio  | Name           | Feel                     |
|--------|----------------|--------------------------|
| 1.125  | Major Second   | Tight, conservative      |
| 1.200  | Minor Third    | Versatile, readable      |
| 1.250  | Major Third    | ⭐ Best for Hebrew web   |
| 1.333  | Perfect Fourth | Editorial, dramatic      |
| 1.618  | Golden Ratio   | Very dramatic, large gaps |

### Recommended Hebrew Type Scale (1.250 ratio, 18px base)
```
--text-xs:   0.75rem   (13.5px)  — captions, fine print
--text-sm:   0.875rem  (15.75px) — secondary text, labels
--text-base: 1.125rem  (18px)    — body text ← Hebrew base
--text-lg:   1.25rem   (22.5px)  — large body, intros
--text-xl:   1.563rem  (28.1px)  — H4, subheadings
--text-2xl:  1.953rem  (35.2px)  — H3
--text-3xl:  2.441rem  (43.9px)  — H2
--text-4xl:  3.052rem  (54.9px)  — H1
--text-5xl:  3.815rem  (68.7px)  — Display/hero
```

All sizes should use `clamp()` for fluid scaling:
```css
h1 { font-size: clamp(2rem, 4vw, 3.5rem); }
h2 { font-size: clamp(1.5rem, 3vw, 2.5rem); }
h3 { font-size: clamp(1.25rem, 2vw, 1.75rem); }
```

---

## 6. HEBREW FONT RECOMMENDATIONS

### Google Fonts (Free, Best for Web)
**Body text:**
- **Heebo** — Designed by Oded Ezer, mastered by Meir Sadan. Hebrew extension of Roboto. Vertical metrics prioritize Hebrew over Latin. Best choice for Hebrew-primary sites. Variable weight.
- **Assistant** — Hebrew companion to Adobe Source Sans. Modern, geometric, excellent for UI.
- **Rubik** — Geometric with open counters, friendly personality. Variable weight with excellent range.

**Headings:**
- **Alef** — Clean sans-serif, good for navigation and headings.
- **Frank Ruhl Libre** — Elegant serif. Pairs beautifully with Heebo for classic-meets-modern aesthetic.
- **Suez One** — Bold serif display font, excellent for hero headlines and impact statements.

**Display/Decorative:**
- **Noto Serif Hebrew** — Variable, 9 weights. Best serif option with maximum flexibility.
- **David Libre** — Editorial, literary character by Meir Sadan. Intimate, personal tone.
- **Bellefair** — Designed by Liron Lavi Turkenich for Google Fonts.

### Premium Options
- **Almoni** (AlefAlefAlef foundry, via MyFonts) — 10 styles, multilingual. Gold standard for neutral Hebrew professional web typography.
- **Noam** (TypeTogether, by Adi Stern) — 13 years in development. Unmatched editorial quality.

### Font Pairing Strategy
A Hebrew font stack needs at minimum:
1. **Body font** — readable at 18px, good weight range (Heebo, Assistant, Rubik)
2. **Heading font** — contrast with body, strong at large sizes (Alef, Frank Ruhl Libre, Suez One)
3. **Display/decorative** (optional) — for hero text, pull quotes (Ellinia CLM, Noto Serif Hebrew)
4. **Fallback chain** — Primary → Secondary → system Hebrew (Arial Hebrew, Tahoma)

### Monospace & Mixed Scripts
- **Never set Hebrew in a Latin-only monospace font** (JetBrains Mono, IBM Plex Mono, etc.). They carry no Hebrew glyphs, so Hebrew silently falls back to an ugly system face — a recurring bug when a template reaches for mono on chrome (tags, kickers, counters, captions). **Mono is for Latin + numbers ONLY** (`01 / 05`, `24/7`, `+972…`, URLs, years). Set any Hebrew chrome in the brand Hebrew face (Heebo) instead — weight + size + color carry the "label" feel; never letter-spacing.

### Font Loading in Next.js
Use `next/font` exclusively — it handles preloading, subsetting, and self-hosting:
```typescript
import { Heebo, Alef } from 'next/font/google'

export const bodyFont = Heebo({
  subsets: ['hebrew', 'latin'],
  variable: '--font-body',
  display: 'swap',
})

export const headingFont = Alef({
  subsets: ['hebrew', 'latin'],
  variable: '--font-heading',
  display: 'swap',
  weight: ['400', '700'],
})
```

For mixed-language pages, use `unicode-range: U+0590-05FF` in `@font-face` declarations to apply Hebrew fonts only to Hebrew characters.

---

## 7. OPTICAL BALANCE & DESIGN RELATIONS

Based on principles from @madebyjames (James Martin) and adapted for web design:

### The "Data Point" (Master Unit)
Pick one element as the master measurement unit (e.g., body line-height, the 8px grid unit). Derive ALL spacing from this:
- Every margin, padding, gap = multiple of the base unit (8, 16, 24, 32...)
- Creates a "rhythm" where spacing relationships are intentional, not arbitrary.

### The Rule of Three (3×3 Grid)
- Distribute visual weight across a 3×3 grid.
- Hero sections: image occupies 2/3, text occupies 1/3 (or vice versa).
- The "relation" should feel intentional.

### Optical vs. Mathematical Balance
- Circles and triangles "look" smaller than squares of the same height.
- Trust the eye over the grid — nudge elements 1–2px when mathematically centered looks wrong.
- Play icons inside circular buttons often need to shift 1–2px to the right to look centered.
- In RTL, this optical adjustment logic mirrors — be aware that the "heavy" side shifts.

### Hierarchy Through "Power Words"
- In Hebrew headings with multiple words, identify the most impactful word.
- Scale secondary text (taglines, dates) relative to the headline using ratios (1/2 or 1/3 of headline size).
- This maps directly to using a typographic scale ratio consistently.

### Visual Weight in Hebrew
Since Hebrew has no uppercase/lowercase distinction:
- **Size contrast** must be more dramatic than in English to create hierarchy.
- **Weight contrast** (regular vs. bold) becomes a primary tool.
- **Typeface contrast** (switching between body and heading font) is more impactful than in Latin typography.

---

## 8. KEY HEBREW TYPE DESIGNERS (Reference)

Understanding the people behind the fonts informs better design decisions:

- **Oded Ezer** — Israel's most prominent experimental typographer. Designed Heebo. Based in Tel Aviv, teaches at Holon Institute of Technology. His principle: Hebrew letterforms have their own structural logic that resists translation from Latin models.
- **Meir Sadan** — Self-taught typographer, pioneered Hebrew typography knowledge online (Oketz blog, 1996). Mastered Heebo, revised Rubik, designed David Libre.
- **Adi Stern** — President of Bezalel Academy. His Noam typeface took 13 years. His MA dissertation on Hebrew book typeface design is cited internationally.
- **Liron Lavi Turkenich** — Created Aravrit (Hebrew-Arabic fusion script), designed Bellefair for Google Fonts. Multilingual type specialist.
- **AlefAlefAlef** (Yaronimus & Elad Yana) — Israel's leading Hebrew font foundry. Functions as foundry, marketplace, magazine, and community hub.
- **Avraham Cornfeld** — Created Almoni and Stika families at AlefAlefAlef.
- **Michal Sahar** — Researched secondary styles in Hebrew typography at Typotheque. Documented the emphasis hierarchy.

---

## 9. TYPOGRAPHY AUDIT CHECKLIST

> For full Israeli accessibility compliance (IS 5568:2020 + Hatzaharat Negishot legal requirements, statutory damages of 50,000 NIS per violation), see the `israeli-accessibility-compliance` skill from skills-il/localization. This checklist covers typography-specific items only.

Run these checks before every PR on a Hebrew site:

```
1. ☐ No physical directional CSS properties (margin-left, padding-right, etc.)
2. ☐ All font-size uses fluid scale tokens (clamp or --text-* variables)
3. ☐ Hebrew body text line-height >= 1.7 for running/long-form (short 1–3-line bursts ≥22px may use 1.25–1.4)
4. ☐ No letter-spacing on Hebrew body text (short one-line list rows may take +0.03–0.04em; display scales negative to -0.05em at 100px-class)
5. ☐ No font-style: italic on Hebrew text
6. ☐ Running text is chunked — no paragraph renders 4+ lines without structural relief (lead-in, beat break, or subhead)
7. ☐ Air added via word-spacing / line-spacing only — never letter-spacing on running text
8. ☐ All bidi content uses unicode-bidi: isolate or <bdi> elements
9. ☐ Motion animations use RTL direction multiplier for x-axis
10. ☐ Content containers max-width ~40rem ceiling (30–38rem for marketing text)
11. ☐ <html> has lang="he" dir="rtl"
12. ☐ Font-family uses CSS variables only (--font-body, --font-heading)
13. ☐ Base font size >= 18px for Hebrew text
14. ☐ Navigation: logo top-right, hamburger menu top-left
15. ☐ Nav link font size >= 16px for Hebrew
16. ☐ No font-weight change on hover (use color/underline instead)
17. ☐ Nav gap uses 8px grid multiples (24/32/40px)
18. ☐ Touch targets >= 44×44px (including padding)
19. ☐ Breadcrumb separator is ‹ not › in RTL
20. ☐ Non-directional elements (logos, numbers, playback) NOT mirrored
21. ☐ Directional elements (arrows, progress bars) ARE mirrored
```

### Grep Commands for Quick Audit
```bash
# Find physical direction violations
grep -rn "margin-left\|margin-right\|padding-left\|padding-right" --include="*.tsx" --include="*.css"
grep -rn "text-align:\s*\(left\|right\)" --include="*.tsx" --include="*.css"

# Find italic violations
grep -rn "font-style:\s*italic\|italic " --include="*.tsx" --include="*.css"

# Find letter-spacing on body text
grep -rn "letter-spacing\|tracking-" --include="*.tsx" --include="*.css"

# Find hardcoded font sizes
grep -rn "font-size:\s*[0-9]" --include="*.tsx" --include="*.css"
```

---

## 10. HEBREW DESIGN INSPIRATION SOURCES

### Agencies Known for Quality Hebrew Typography
- **The Studio** (thestudio.co.il) — Cultural institution work, highest standard
- **Dov Abramson Studio** — Bridges tradition and digital
- **LVN Studio** (lvn.studio) — Awwwards Site of the Day winner
- **Studio&more** (nmore.co) — Multiple Awwwards Honorable Mentions
- **Hooligans Creative** (hooligans.co.il) — Part of K Group, major Hebrew brands

### Cultural Institution Sites (Best Hebrew Typography)
- **Tel Aviv Museum of Art** (tamuseum.org.il) — Exemplary bilingual typography; the §2 chunking pattern in the wild
- **Batsheva Dance Company** (batsheva.co.il) — Minimalist type + dramatic imagery
- **Habima National Theater** (habima.co.il) — Hebrew-first, dramatic type sizing
- **Design Museum Holon** (dmh.org.il) — Custom typeface by Adi Stern

### Resources
- **AlefAlefAlef** (alefalefalef.co.il) — Foundry, marketplace, magazine, community
- **Awwwards Israel** (awwwards.com/websites/Israel/) — Award-winning Israeli sites
- **FontSensei** (fontsensei.com/tag/hebrew) — Hebrew Google Fonts discovery
- **AGGA** (gdai.co.il) — Association of Graphic Designers in Israel
- **Prog.co.il** — Forum with dedicated font designer sub-forum

### Key Insight
Most Hebrew business and marketing sites ship template-based typography. A site with intentional Hebrew typography — chunked structure, calibrated leading, disciplined emphasis — is an immediate differentiator.

---

## 11. TAILWIND CSS v4 CONFIGURATION FOR HEBREW

Reference configuration for a Hebrew project:

```css
/* globals.css */
@import "tailwindcss";

@theme {
  /* Fluid type scale (1.250 ratio, 18px base) */
  --text-xs: clamp(0.7rem, 0.65rem + 0.25vw, 0.75rem);
  --text-sm: clamp(0.8rem, 0.75rem + 0.25vw, 0.875rem);
  --text-base: clamp(1rem, 0.95rem + 0.25vw, 1.125rem);
  --text-lg: clamp(1.1rem, 1rem + 0.5vw, 1.25rem);
  --text-xl: clamp(1.3rem, 1.1rem + 1vw, 1.563rem);
  --text-2xl: clamp(1.5rem, 1.2rem + 1.5vw, 1.953rem);
  --text-3xl: clamp(1.8rem, 1.4rem + 2vw, 2.441rem);
  --text-4xl: clamp(2.2rem, 1.6rem + 3vw, 3.052rem);
  --text-5xl: clamp(2.5rem, 1.8rem + 3.5vw, 3.815rem);

  /* Hebrew-optimized line heights (1.7 floor; up to 1.8 for marketing pages) */
  --leading-body: 1.7;
  --leading-body-airy: 1.8;
  --leading-heading: 1.3;
  --leading-display: 1.15;
  --leading-tight: 1.25;
}

:root {
  direction: rtl;
}
```

### Cursor Rules File
Save as `.cursor/rules/hebrew-typography.mdc`:
```markdown
---
description: Hebrew RTL typography standards
globs: ["**/*.tsx", "**/*.ts", "**/*.css"]
alwaysApply: true
---

# Hebrew RTL Typography Standards

## Critical Rules
- HTML root: lang="he" dir="rtl" ALWAYS
- NEVER use margin-left/right, padding-left/right — use logical properties
- All slide animations multiply x values by -1 for RTL
- Use text-align: start/end, never left/right
- Hebrew body line-height: 1.7–1.8 for running text (short 1–3-line bursts ≥22px: 1.25–1.4)
- Letter-spacing: normal for Hebrew body text (single-term emphasis & short list rows excepted; display scales negative with size)
- Base font size: 18px minimum
- NEVER use font-style: italic on Hebrew text
- Bold for emphasis, never italic
- No 4+ line text monoliths — chunk into lead-in + 2–4-line beats

## Font Tokens
- Body: font-body class (--font-body variable)
- Headings: font-heading class (--font-heading variable)
- Display: font-display class (--font-display variable)
- All sizes use clamp() — never hardcode px values
```

### CLAUDE.md Section
Add to project root for Claude Code context:
```markdown
## RTL Rules — CRITICAL
- HTML root: lang="he" dir="rtl" ALWAYS
- NEVER use margin-left/right, padding-left/right — use logical properties
- All slide animations multiply x values by -1 for RTL
- Use text-align: start/end, never left/right
- Hebrew body line-height: 1.7–1.8 for running text (short 1–3-line bursts ≥22px: 1.25–1.4)
- Letter-spacing: normal for Hebrew body (tracking = single-term emphasis or short list rows; display scales negative with size)
- Base font size: 18px minimum (Hebrew is visually smaller than Latin)
- NEVER use italic for Hebrew text — bold for emphasis
- No 4+ line monoliths — lead-in + 2–4-line beats (see the skill's §2)

## Typography Audit — Run Before Every PR
1. No physical directional CSS properties
2. All font-size uses fluid scale tokens
3. Hebrew body text line-height >= 1.7 for running/long-form (short bursts ≥22px: 1.25–1.4)
4. No letter-spacing on Hebrew body text (short list rows may take +0.03–0.04em; display scales negative with size)
5. No font-style: italic on Hebrew text
6. Running text chunked — no 4+ line paragraphs without relief
7. All bidi content uses <bdi> or unicode-bidi: isolate
8. Motion animations use RTL direction multiplier for x-axis
9. Content containers max-width ~40rem ceiling for Hebrew readability
```

<!-- 2026-06-11 (v0.1.5 of recstudio-studio): moved into the plugin from the desktop-app bundle; merged the two duplicated Navigation Typography sections (stricter rules win — no weight change on hover); added §2 Structure & Chunking (the monolith fix); body line-height recalibrated 1.6–1.7 → 1.7–1.8; word-spacing rule added; corner-chrome exception added to logical-properties rule; audit checklist updated. -->
<!-- 2026-06-14 (v0.2.5): integrated the Dov Abramson typography study (research/2026-06-12_dov-typography-study/PROPOSED-SKILL-UPDATES.md), approved by Oded except the nikud exception (P9, deferred). §1 Line Height — scoped the 1.7 floor to running/long-form + added the 1.25–1.4 short-burst band (1–3 lines, ≥22px); display LH bands down to 1.0 at ≥95px. §1 Letter-Spacing — negative display tracking now scales with size (to -0.05em at 100px-class); added the +0.03–0.04em short-list-row exception; visible Hebrew display is never positive-tracked. §1 Emphasis — inserted the ink-value step as #2 (gray→black+700, replaces italic), demoted typeface-switch, + a dark-background ramp note (GitHub Primer #e6edf3/#8b949e/#6e7681 on #1a1b1d; never hex-invert or use pure #fff). §1 Font Size — added the Hebrew +5–14% over-Latin calibration (share the leading; calibrate on the REAL font). §5 — added the two-scale page law for brand/portfolio surfaces. §6 — added Monospace & Mixed Scripts (never Hebrew in a Latin-only mono). §9 + §11 cursor/CLAUDE blocks synced. NIKUD stays locked (no nikud) — Oded wants a one-word-phonetic exception LATER when more confident; deferred, not applied. -->
<!-- 2026-06-14 (v0.2.6): §1 Font Size — RecStudio's Hebrew↔Latin calibration EXAMPLE recalibrated by eye on real Metropolis to Latin 0.95em = Hebrew +5% (near-even scripts), down from an earlier 0.88em/+14% over-shoot. Oded re-judged it via the recstudio-content design-widgets calibration widget; note the process lesson — his words said "Hebrew bigger" but his rendered slider pick was near-even, and the render wins over the words. The general +3–14% over-Latin range is unchanged; RecStudio simply sits at the low end even on display. Synced same-day to carousel-design.md M7 + artifacts/dov-dark-carousel (component.html + artifact.md) + the design-widgets shell/calibration widget. -->
<!-- 2026-06-16 (v0.2.7): added §1.5 TEXT HIERARCHY — consolidated the scattered size/weight/ink-value hierarchy material into one prominent section: the 3 axes + the 3-level anchor/mid/faint ink ladder + the light-vs-dark RE-TUNE/halation rule with both presets as a table (light #1a1b1d/#7f7f7f/#c1c1c1 on #fff · dark Primer #e6edf3/#8b949e/#6e7681 on #1a1b1d) + WCAG-per-level. Elevated the dark ramp OUT of the §1 Emphasis blockquote (now a pointer) so there's ONE home for the hexes (no drift). Cross-linked the live ink-ramps design widget (recstudio-content lab/design-widgets/ink-ramps/). Oded's ask: "make this rule part of my typography skillset." -->
<!-- 2026-06-16 (v0.2.8): §1.5 — added "Deriving a ramp for ANY background" method (answers Oded's "if I pick a blue bg, how does the skill know the colors?"). Core: hierarchy is stepped LUMINANCE contrast not hue; 3 APCA targets (anchor Lc≈90 / mid Lc≈75 / faint Lc≈45–60, WCAG = floor only); solve in OKLCH (perceptually even L axis, not HSL) with starting L anchors per preset; tint neutrals toward the bg hue at low chroma (~0.01–0.02 — Refactoring UI / Radix tinted greys); halation cap = anchor never pure #fff on dark/colored (OKLCH L≈0.93); verify each level's contrast. Cited the tools that do it: Adobe Leonardo (@adobe/leonardo-contrast-colors generateContrastColors), APCA (apcacontrast.com), inclusivecolors.com. Skill-only — no new widget (Oded declined). The two locked presets unchanged. -->
