@charset "UTF-8"; /* * Typography tokens — single source of truth for the type system. * * ┌─────────┬──────────┬────────────────────────────────────────────┐ * │ Token │ Size │ Notes │ * ├─────────┼──────────┼────────────────────────────────────────────┤ * │ --text-2xs │ 11px │ base ÷ 1.25²·⁵ (rounded) │ * │ --text-xs │ 12px │ base ÷ 1.25² │ * │ --text-sm │ 13px │ base ÷ 1.25 │ * │ --text-base│ 14px │ ← anchor (enterprise admin density) │ * │ --text-md │ 15px │ escape hatch between base and lg │ * │ --text-lg │ 16px │ base × 1.25 (rounded to whole px) │ * │ --text-xl │ 18px │ base × 1.25² │ * │ --text-2xl │ 18–22px│ fluid via clamp() │ * │ --text-3xl │ 22–28px│ fluid via clamp() │ * │ --text-4xl │ 26–34px│ fluid via clamp() │ * │ --text-5xl │ 32–44px│ fluid via clamp() │ * └─────────┴──────────┴────────────────────────────────────────────┘ * * Scale ratio: ~1.25× (major third) from a 14px base. * Fluid tokens (2xl+) use clamp(min, preferred, max) with a vw component. * * Semantic aliases: * Use semantic aliases for role-based sizing (e.g. "this is a label"). * Use primitives when the size is context-independent (e.g. "make it 12px"). */ @layer tokens { :host, :root { /* ── Size scale (primitives) ──────────────────────────────────── */ --text-2xs: 0.6875rem; /* 11px */ --text-xs: 0.75rem; /* 12px */ --text-sm: 0.8125rem; /* 13px */ --text-base: 0.875rem; /* 14px — enterprise admin baseline */ --text-md: 0.9375rem; /* 15px — escape hatch */ --text-lg: 1rem; /* 16px */ --text-xl: 1.125rem; /* 18px */ --text-2xl: clamp(1.125rem, 1rem + 0.5vw, 1.375rem); /* 18–22px */ --text-3xl: clamp(1.375rem, 1.2rem + 0.75vw, 1.75rem); /* 22–28px */ --text-4xl: clamp(1.625rem, 1.4rem + 1vw, 2.125rem); /* 26–34px */ --text-5xl: clamp(2rem, 1.7rem + 1.5vw, 2.75rem); /* 32–44px */ /* ── Semantic aliases ─────────────────────────────────────────── */ --text-caption: var(--text-xs); /* small annotations, hints */ --text-label: var(--text-sm); /* form labels, nav items */ --text-body: var(--text-base); /* default body text */ --text-title: var(--text-xl); /* section headings (h2) */ --text-page-title: var(--text-3xl); /* page headings (h1) */ /* ── Line-height tokens ─────────────────────────────────────── */ --leading-none: 1; --leading-tight: 1.2; --leading-snug: 1.375; --leading-normal: 1.5; --leading-relaxed: 1.625; --leading-loose: 1.75; /* ── Font-weight tokens ─────────────────────────────────────── */ --font-regular: 400; --font-medium: 500; --font-semibold: 600; --font-bold: 700; /* ── Letter-spacing tokens ──────────────────────────────────── */ --tracking-tight: -0.01em; --tracking-normal: 0; --tracking-wide: 0.025em; --tracking-wider: 0.05em; } /* ── Reduced-motion fallback ──────────────────────────────────── */ /* Lock fluid heading sizes to fixed midpoints for users who */ /* prefer reduced motion — viewport-responsive text can feel */ /* jarring when resizing. */ @media (prefers-reduced-motion: reduce) { :host, :root { --text-2xl: 1.25rem; /* midpoint of 1.125–1.375rem */ --text-3xl: 1.5625rem; /* midpoint of 1.375–1.75rem */ --text-4xl: 1.875rem; /* midpoint of 1.625–2.125rem */ --text-5xl: 2.375rem; /* midpoint of 2–2.75rem */ } } }