diff --git a/core/src/css/test/a11y/typography.e2e.ts b/core/src/css/test/typography/a11y/typography.e2e.ts
similarity index 100%
rename from core/src/css/test/a11y/typography.e2e.ts
rename to core/src/css/test/typography/a11y/typography.e2e.ts
diff --git a/core/src/css/test/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Chrome-linux.png b/core/src/css/test/typography/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/css/test/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/css/test/typography/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/css/test/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Firefox-linux.png b/core/src/css/test/typography/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/css/test/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/css/test/typography/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/css/test/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Safari-linux.png b/core/src/css/test/typography/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/css/test/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Safari-linux.png
rename to core/src/css/test/typography/a11y/typography.e2e.ts-snapshots/typography-scale-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts b/core/src/css/test/typography/basic/typography.e2e.ts
new file mode 100644
index 0000000000..d87a270d2b
--- /dev/null
+++ b/core/src/css/test/typography/basic/typography.e2e.ts
@@ -0,0 +1,107 @@
+import { expect } from '@playwright/test';
+import { configs, test } from '@utils/test/playwright';
+
+/**
+ * Typography styles are only available in the Ionic theme
+ */
+configs({ modes: ['ionic-md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
+ test.describe(title('typography: global styles'), () => {
+ test('should apply the globals styles for each semantic tag', async ({ page }) => {
+ await page.setContent(
+ `
+
+
+
H1: The quick brown fox jumps over the lazy dog
+
H2: The quick brown fox jumps over the lazy dog
+
H3: The quick brown fox jumps over the lazy dog
+
H4: The quick brown fox jumps over the lazy dog
+
H5: The quick brown fox jumps over the lazy dog
+
H6: The quick brown fox jumps over the lazy dog
+
Tag_P FontLarge: The quick brown fox jumps over the lazy dog
+
Tag_Span FontSmall: The quick brown fox jumps over the lazy dog
+
Tag_None FontBase: The quick brown fox jumps over the lazydog
+
+ `,
+ config
+ );
+
+ const div = page.locator('div');
+ await expect(div).toHaveScreenshot(screenshot(`ionic-semantic-global-styles`));
+ });
+
+ test('should apply the utility classes for each heading', async ({ page }) => {
+ await page.setContent(
+ `
+
+
+
Tag H1 - Style Heading 2 - Font Light
+ Tag H2 - Style Heading 3 - Font Light
+ Tag H3 - Style Heading 4 - Font Regular
+ Tag H4 - Style Heading 5 - Font Medium
+ Tag H5 - Style Heading 6 - Font Semibold
+ Tag H6 - Style Heading 1 - Font Bold
+
+ `,
+ config
+ );
+
+ const div = page.locator('div');
+ await expect(div).toHaveScreenshot(screenshot(`ionic-utility-classes-semantic-tags`));
+ });
+
+ test('should apply the heading classes on ion-text element', async ({ page }) => {
+ await page.setContent(
+ `
+
+
+
Utility class 'ionic-heading1'
+
Utility class 'ionic-heading2'
+
Utility class 'ionic-heading3'
+
Utility class 'ionic-heading4'
+
Utility class 'ionic-heading5'
+
Utility class 'ionic-heading6'
+
+ `,
+ config
+ );
+
+ const div = page.locator('div');
+ await expect(div).toHaveScreenshot(screenshot(`ionic-utility-classes-headings`));
+ });
+
+ test('should apply the utility classes for font weights', async ({ page }) => {
+ await page.setContent(
+ `
+
+
+
Utility class 'ionic-font-light'
+
Utility class 'ionic-font-regular'
+
Utility class 'ionic-font-medium'
+
Utility class 'ionic-font-semibold'
+
Utility class 'ionic-font-bold'
+
+ `,
+ config
+ );
+
+ const div = page.locator('div');
+ await expect(div).toHaveScreenshot(screenshot(`ionic-utility-classes-font-weights`));
+ });
+
+ test('should apply the utility classes for font display', async ({ page }) => {
+ await page.setContent(
+ `
+
+
+
Utility class 'ionic-display-s'
+
Utility class 'ionic-display-m'
+
+ `,
+ config
+ );
+
+ const div = page.locator('div');
+ await expect(div).toHaveScreenshot(screenshot(`ionic-utility-classes-font-displays`));
+ });
+ });
+});
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-semantic-global-styles-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-semantic-global-styles-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..34dd6aac2e
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-semantic-global-styles-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-semantic-global-styles-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-semantic-global-styles-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..d3ca79a8ee
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-semantic-global-styles-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-semantic-global-styles-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-semantic-global-styles-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..2f089beead
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-semantic-global-styles-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-displays-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-displays-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..c45a2f9ea0
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-displays-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-displays-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-displays-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..135caf1f16
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-displays-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-displays-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-displays-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..98de003845
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-displays-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-weights-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-weights-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..315434f81d
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-weights-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-weights-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-weights-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..6dab853f18
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-weights-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-weights-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-weights-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..58d1fa9721
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-font-weights-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-headings-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-headings-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..1096cde66f
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-headings-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-headings-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-headings-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..90eabf4717
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-headings-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-headings-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-headings-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..40c1689928
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-headings-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-semantic-tags-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-semantic-tags-ionic-md-ltr-light-Mobile-Chrome-linux.png
new file mode 100644
index 0000000000..220736e7be
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-semantic-tags-ionic-md-ltr-light-Mobile-Chrome-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-semantic-tags-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-semantic-tags-ionic-md-ltr-light-Mobile-Firefox-linux.png
new file mode 100644
index 0000000000..d768764f60
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-semantic-tags-ionic-md-ltr-light-Mobile-Firefox-linux.png differ
diff --git a/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-semantic-tags-ionic-md-ltr-light-Mobile-Safari-linux.png b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-semantic-tags-ionic-md-ltr-light-Mobile-Safari-linux.png
new file mode 100644
index 0000000000..a8080e15f4
Binary files /dev/null and b/core/src/css/test/typography/basic/typography.e2e.ts-snapshots/ionic-utility-classes-semantic-tags-ionic-md-ltr-light-Mobile-Safari-linux.png differ
diff --git a/core/src/css/typography.ionic.scss b/core/src/css/typography.ionic.scss
new file mode 100644
index 0000000000..53a0336a15
--- /dev/null
+++ b/core/src/css/typography.ionic.scss
@@ -0,0 +1,173 @@
+:root {
+ /* Font Family */
+ --ionic-font-family: "Inter", sans-serif;
+
+ /* Font sizes */
+ --ionic-font-size-s: 12px;
+ --ionic-font-size-m: 14px;
+ --ionic-font-size-l: 16px;
+
+ /* Font size displays */
+ --ionic-display-s: 32px;
+ --ionic-display-m: 36px;
+
+ /* Headings */
+ --ionic-h1-font-size: 28px;
+ --ionic-h2-font-size: 26px;
+ --ionic-h3-font-size: 24px;
+ --ionic-h4-font-size: 22px;
+ --ionic-h5-font-size: 20px;
+ --ionic-h6-font-size: 18px;
+
+ /* Font Weights */
+ --ionic-font-light: 300;
+ --ionic-font-regular: 400;
+ --ionic-font-medium: 500;
+ --ionic-font-semibold: 600;
+ --ionic-font-bold: 700;
+
+ /* Line heights */
+ --ionic-line-height-xs: 16px;
+ --ionic-line-height-s: 20px;
+ --ionic-line-height-m: 24px;
+ --ionic-line-height-l: 28px;
+ --ionic-line-height-xl: 32px;
+ --ionic-line-height-xxl: 36px;
+ --ionic-line-height-display-s: 44px;
+ --ionic-line-height-display-m: 48px;
+
+ /* Letter spacing */
+ --ionic-letter-spacing-none: 0em;
+ --ionic-letter-spacing-s: 0.1em;
+ --ionic-letter-spacing-m: 0.15em;
+}
+
+html {
+ font-family: var(--ionic-font-family);
+ font-size: var(--ionic-font-size-m);
+ font-weight: var(--ionic-font-regular);
+
+ line-height: var(--ionic-line-height-m);
+}
+
+h1,
+.ionic-heading1,
+h2,
+.ionic-heading2,
+h3,
+.ionic-heading3,
+h4,
+.ionic-heading4,
+h5,
+.ionic-heading5,
+h6,
+.ionic-heading6 {
+ color: var(--ionic-color-base);
+
+ font-weight: var(--ionic-font-semibold);
+}
+
+h1,
+.ionic-heading1 {
+ font-size: var(--ionic-h1-font-size);
+
+ line-height: var(--ionic-line-height-xxl);
+}
+
+h2,
+.ionic-heading2 {
+ font-size: var(--ionic-h2-font-size);
+
+ line-height: var(--ionic-line-height-xl);
+}
+
+h3,
+.ionic-heading3 {
+ font-size: var(--ionic-h3-font-size);
+
+ line-height: var(--ionic-line-height-xl);
+}
+
+h4,
+.ionic-heading4 {
+ font-size: var(--ionic-h4-font-size);
+
+ line-height: var(--ionic-line-height-l);
+}
+
+h5,
+.ionic-heading5 {
+ font-size: var(--ionic-h5-font-size);
+
+ line-height: var(--ionic-line-height-l);
+}
+
+h6,
+.ionic-heading6 {
+ font-size: var(--ionic-h6-font-size);
+
+ line-height: var(--ionic-line-height-m);
+}
+
+/* Utility Classes */
+/* Font size display */
+.ionic-font-display-s,
+.ionic-font-display-m {
+ font-weight: var(--ionic-font-regular);
+}
+
+.ionic-display-s {
+ font-size: var(--ionic-display-s);
+
+ line-height: var(--ionic-line-height-display-s);
+}
+
+.ionic-display-m {
+ font-size: var(--ionic-display-m);
+
+ line-height: var(--ionic-line-height-display-m);
+}
+
+/* Font sizes */
+.ionic-font-size-s {
+ font-size: var(--ionic-font-size-s);
+}
+.ionic-font-size-m {
+ font-size: var(--ionic-font-size-m);
+}
+.ionic-font-size-l {
+ font-size: var(--ionic-font-size-l);
+}
+
+/* Font weights */
+.ionic-font-light {
+ font-weight: var(--ionic-font-light);
+}
+.ionic-font-regular {
+ font-weight: var(--ionic-font-regular);
+}
+.ionic-font-medium {
+ font-weight: var(--ionic-font-medium);
+}
+.ionic-font-semibold {
+ font-weight: var(--ionic-font-semibold);
+}
+.ionic-font-bold {
+ font-weight: var(--ionic-font-bold);
+}
+
+/* Letter spacing */
+.ionic-letter-spacing-none {
+ letter-spacing: var(--ionic-letter-spacing-none);
+}
+.ionic-letter-spacing-s {
+ letter-spacing: var(--ionic-letter-spacing-s);
+}
+.ionic-letter-spacing-m {
+ letter-spacing: var(--ionic-letter-spacing-m);
+}
+
+/* Common */
+.ionic-font-italic {
+ font-style: italic;
+}