$fibonacci-sequence: 1, 2, 3, 5, 8, 13, 21, 34, 55;

$min-breakpoint: 27; // = 432px
$max-breakpoint: 80; // = 1280px

$root-font-size: calc(var(--unitone--base-font-size) * 1px);

$_max-font-size: calc(var(--unitone--harmonic-sequence-base) / (var(--unitone--max-harmonic-sequence-base) - var(--unitone--font-size)));
$_min-font-size: calc(var(--unitone--harmonic-sequence-base) / (var(--unitone--min-harmonic-sequence-base) - var(--unitone--font-size)) + 1 - (var(--unitone--harmonic-sequence-base) / var(--unitone--min-harmonic-sequence-base)));
$_slope: calc((#{ $_max-font-size } - #{ $_min-font-size }) / (#{ $max-breakpoint - $min-breakpoint }));
$_intercept: calc(#{-1 * $min-breakpoint } * #{ $_slope } + #{ $_min-font-size });
$_preferred-font-size: calc((#{ $_intercept } * 1rem) + (#{ $_slope } * 100vw));
$_font-size-fluid: clamp(var(--unitone--fluid-typography-min-length, calc(1rem * #{ $_min-font-size })), #{ $_preferred-font-size }, var(--unitone--fluid-typography-max-length, calc(1rem * $_max-font-size)));

$_font-size-scale: calc(var(--unitone--harmonic-sequence-base) / (var(--unitone--harmonic-sequence-base) - var(--unitone--font-size)));

/**
 * Line-height scaling (non-linear / hyperbolic reciprocal curve)
 *
 * This block computes a font-size–dependent line-height using a hyperbolic (reciprocal) curve:
 *
 * LH(fs) = Lmin' + K / (fs + C)
 *
 * ### Internal bias (-0.1) for the effective minimum (Lmin')
 * We slightly lower the effective minimum to compensate for the
 * asymptotic nature of the reciprocal curve. This makes the observed
 * minimum in typical font-size ranges closer to the user’s expectation.
 *
 * ### C: Curvature / controls how quickly the curve approaches the minimum
 * Larger C => slower decay (more generous line-height for larger text)
 * Smaller C => faster decay (tighter line-height sooner)
 *
 * ### K: Amplitude / scale factor for the reciprocal term
 * We compute K so that the curve respects the intended range between
 * max-line-height and the biased minimum, and so that near the base
 * font size the line-height stays close to max (and is clamped there).
 */
$_min-line-height: calc(var(--unitone--min-line-height) - 0.1);
$_line-height-amplitude: calc((var(--unitone--max-line-height) - #{ $_min-line-height }) * (var(--unitone--base-font-size) + var(--unitone--line-height-curvature)));
$_line-height: clamp(
  var(--unitone--min-line-height),
  (#{ $_min-line-height } + #{ $_line-height-amplitude } / (var(--unitone--result--1em-px) + var(--unitone--line-height-curvature))),
  var(--unitone--max-line-height)
);

$_font-size: calc($_font-size-scale * 1rem);
$_font-size-em: calc($_font-size-scale * 1em);

@mixin typography {
  --unitone--font-size-rem: #{ $_font-size };
  --unitone--font-size-em: #{ $_font-size-em };
  --unitone--font-size-fluid: #{ $_font-size-fluid };

  --unitone--min-line-height: calc(1 + 2 * min(var(--unitone--min-half-leading), var(--unitone--half-leading)));
  --unitone--max-line-height: calc(1 + 2 * var(--unitone--half-leading));
  --unitone--line-height: #{ $_line-height };

  font-size: var(--unitone--font-size-rem);
  line-height: var(--unitone--line-height);

  // @todo In Firefox, using tan(atan2()) for line-height is considered invalid.
  // Therefore, a fallback line-height is applied.
  @supports (-moz-appearance: none) {
    --unitone--result--1em-px: calc(#{ $_font-size-scale } * var(--unitone--base-font-size));
  }
}

@mixin typography-em {
  font-size: var(--unitone--font-size-em);
}

@mixin fluid-typography {
  font-size:var(--unitone--font-size-fluid);
}

$container-max-width: $max-breakpoint * 16px; // = 1280px
$grid-columns: 12;
$grid-rows: 7;
