/// Sets the configuration for generating functional properties.
/// `A(define, ...)` will throw if this mixin has not been included prior.
@mixin anthology-configure($config: ()) {

  @if not $_anthology-should-block-config
  {
    // Assign an empty map to each configured breakpoint
    @each $breakpoint, $value in A(map-get, $config, 'breakpoints')
    {

      // "default" is reserved.
      @if $breakpoint == 'default'
      {
        @error '[anthology::configure] --- Breakpoints cannot be named `default`.';
      }

      $_anthology-define-state-defaults: A(map-set,
        $_anthology-define-state-defaults,
        ('responsive', $breakpoint),
        ()
      ) !global;

    }

    // Apply string escapes to required configuration keys.
    $escaped-config-keys: (
    // Config key      // Escape multiplicity
      'separator':        2,
      'important-tag':    2,
      'theme-tag':        2,
      'responsive-tag':   2,
      'namespace-tag':    1,
      'grid-prefix':      2,
      'grid-area-prefix': 2,
      'theme-attr':       2,
    );
    @each $config-key, $value in $config
    {
      @if map-has-key($escaped-config-keys, $config-key)
      {
        $multiplicity: map-get($escaped-config-keys, $config-key);
        $config: A(map-set, $config, $config-key, A(str-escape, A(map-get, $config, $config-key), $multiplicity));
      }
    }

    // Assign config variables
    $config: A(map-merge, $_anthology-config-defaults, $config);
    $_anthology-config-breakpoints: A(map-get, $config, 'breakpoints') !global;
    $_anthology-config-separator: A(map-get, $config, 'separator') !global;
    $_anthology-config-important-tag: A(map-get, $config, 'important-tag') !global;
    $_anthology-config-theme-tag: A(map-get, $config, 'theme-tag') !global;
    $_anthology-config-responsive-tag: A(map-get, $config, 'responsive-tag') !global;
    $_anthology-config-namespace-tag: A(map-get, $config, 'namespace-tag') !global;
    $_anthology-config-grid-prefix: A(map-get, $config, 'grid-prefix') !global;
    $_anthology-config-grid-area-prefix: A(map-get, $config, 'grid-area-prefix') !global;
    $_anthology-config-theme-attr: A(map-get, $config, 'theme-attr') !global;

    $_anthology-define-state: _A(flush-define-state, 'generic') !global;
    $_anthology-define-state: _A(flush-define-state, 'responsive') !global;

    // Set configuration as "ready"
    $_anthology-config-is-ready: true !global;
  }
  @else
  {
    @error '[anthology::configure] --- `A(configure, ...)` can only be included before calling `A(emit, ...)`.';
  }

}
