:root {
  --type-min-width-rem: calc(var(--min-viewport) / 16);
  --type-max-width-rem: calc(var(--type-max-viewport) / 16);
  --type-vw-span: calc(var(--type-max-width-rem) - var(--type-min-width-rem));
  --type-max-boost: calc(var(--type-max-font-size) / var(--min-font-size));
  --type-base-min: calc(var(--min-font-size) / 16);
  --type-base-max: calc(var(--type-max-font-size) / 16 * var(--type-max-boost));

  --fs--2-min: calc(var(--type-base-min) * pow(var(--type-min-scale), -2));
  --fs--2-max: calc(var(--type-base-max) * pow(var(--type-max-scale), -2));
  --fs--1-min: calc(var(--type-base-min) * pow(var(--type-min-scale), -1));
  --fs--1-max: calc(var(--type-base-max) * pow(var(--type-max-scale), -1));
  --fs-0-min: var(--type-base-min); --fs-0-max: var(--type-base-max);
  --fs-1-min: calc(var(--type-base-min) * pow(var(--type-min-scale), 1));
  --fs-1-max: calc(var(--type-base-max) * pow(var(--type-max-scale), 1));
  --fs-2-min: calc(var(--type-base-min) * pow(var(--type-min-scale), 2));
  --fs-2-max: calc(var(--type-base-max) * pow(var(--type-max-scale), 2));
  --fs-3-min: calc(var(--type-base-min) * pow(var(--type-min-scale), 3));
  --fs-3-max: calc(var(--type-base-max) * pow(var(--type-max-scale), 3));
  --fs-4-min: calc(var(--type-base-min) * pow(var(--type-min-scale), 4));
  --fs-4-max: calc(var(--type-base-max) * pow(var(--type-max-scale), 4));
  --fs-5-min: calc(var(--type-base-min) * pow(var(--type-min-scale), 5));
  --fs-5-max: calc(var(--type-base-max) * pow(var(--type-max-scale), 5));
  --fs-6-min: calc(var(--type-base-min) * pow(var(--type-min-scale), 6));
  --fs-6-max: calc(var(--type-base-max) * pow(var(--type-max-scale), 6));
  --fs-7-min: calc(var(--type-base-min) * pow(var(--type-min-scale), 7));
  --fs-7-max: calc(var(--type-base-max) * pow(var(--type-max-scale), 7));

  --fs--2-slope: calc((var(--fs--2-max) - var(--fs--2-min)) / var(--type-vw-span));
  --fs--1-slope: calc((var(--fs--1-max) - var(--fs--1-min)) / var(--type-vw-span));
  --fs-0-slope:  calc((var(--fs-0-max)  - var(--fs-0-min))  / var(--type-vw-span));
  --fs-1-slope:  calc((var(--fs-1-max)  - var(--fs-1-min))  / var(--type-vw-span));
  --fs-2-slope:  calc((var(--fs-2-max)  - var(--fs-2-min))  / var(--type-vw-span));
  --fs-3-slope:  calc((var(--fs-3-max)  - var(--fs-3-min))  / var(--type-vw-span));
  --fs-4-slope:  calc((var(--fs-4-max)  - var(--fs-4-min))  / var(--type-vw-span));
  --fs-5-slope:  calc((var(--fs-5-max)  - var(--fs-5-min))  / var(--type-vw-span));
  --fs-6-slope:  calc((var(--fs-6-max)  - var(--fs-6-min))  / var(--type-vw-span));
  --fs-7-slope:  calc((var(--fs-7-max)  - var(--fs-7-min))  / var(--type-vw-span));

  --fs--2-yint: calc(var(--fs--2-min) - var(--type-min-width-rem) * var(--fs--2-slope));
  --fs--1-yint: calc(var(--fs--1-min) - var(--type-min-width-rem) * var(--fs--1-slope));
  --fs-0-yint:  calc(var(--fs-0-min)  - var(--type-min-width-rem) * var(--fs-0-slope));
  --fs-1-yint:  calc(var(--fs-1-min)  - var(--type-min-width-rem) * var(--fs-1-slope));
  --fs-2-yint:  calc(var(--fs-2-min)  - var(--type-min-width-rem) * var(--fs-2-slope));
  --fs-3-yint:  calc(var(--fs-3-min)  - var(--type-min-width-rem) * var(--fs-3-slope));
  --fs-4-yint:  calc(var(--fs-4-min)  - var(--type-min-width-rem) * var(--fs-4-slope));
  --fs-5-yint:  calc(var(--fs-5-min)  - var(--type-min-width-rem) * var(--fs-5-slope));
  --fs-6-yint:  calc(var(--fs-6-min)  - var(--type-min-width-rem) * var(--fs-6-slope));
  --fs-7-yint:  calc(var(--fs-7-min)  - var(--type-min-width-rem) * var(--fs-7-slope));

  --font-size--2: clamp(calc(var(--fs--2-min) * 1rem), calc(var(--fs--2-yint) * 1rem + var(--fs--2-slope) * 100vw), calc(var(--fs--2-max) * 1rem));
  --font-size--1: clamp(calc(var(--fs--1-min) * 1rem), calc(var(--fs--1-yint) * 1rem + var(--fs--1-slope) * 100vw), calc(var(--fs--1-max) * 1rem));
  --font-size-0:  clamp(calc(var(--fs-0-min)  * 1rem), calc(var(--fs-0-yint)  * 1rem + var(--fs-0-slope)  * 100vw), calc(var(--fs-0-max)  * 1rem));
  --font-size-1:  clamp(calc(var(--fs-1-min)  * 1rem), calc(var(--fs-1-yint)  * 1rem + var(--fs-1-slope)  * 100vw), calc(var(--fs-1-max)  * 1rem));
  --font-size-2:  clamp(calc(var(--fs-2-min)  * 1rem), calc(var(--fs-2-yint)  * 1rem + var(--fs-2-slope)  * 100vw), calc(var(--fs-2-max)  * 1rem));
  --font-size-3:  clamp(calc(var(--fs-3-min)  * 1rem), calc(var(--fs-3-yint)  * 1rem + var(--fs-3-slope)  * 100vw), calc(var(--fs-3-max)  * 1rem));
  --font-size-4:  clamp(calc(var(--fs-4-min)  * 1rem), calc(var(--fs-4-yint)  * 1rem + var(--fs-4-slope)  * 100vw), calc(var(--fs-4-max)  * 1rem));
  --font-size-5:  clamp(calc(var(--fs-5-min)  * 1rem), calc(var(--fs-5-yint)  * 1rem + var(--fs-5-slope)  * 100vw), calc(var(--fs-5-max)  * 1rem));
  --font-size-6:  clamp(calc(var(--fs-6-min)  * 1rem), calc(var(--fs-6-yint)  * 1rem + var(--fs-6-slope)  * 100vw), calc(var(--fs-6-max)  * 1rem));
  --font-size-7:  clamp(calc(var(--fs-7-min)  * 1rem), calc(var(--fs-7-yint)  * 1rem + var(--fs-7-slope)  * 100vw), calc(var(--fs-7-max)  * 1rem));
}
