// Color contrast
.color-yiq(@color) {
  .yiq-mixin (@v) when (@v >= 150) {
    color: #111;
  }
  .yiq-mixin (@v) when (default()) {
    color: #fff;
  }

  @r: red(@color);
  @g: green(@color);
  @b: blue(@color);

  @yiq: (((@r * 299) + (@g * 587) + (@b * 114)) / 1000);
  .yiq-mixin(@yiq);
}

// Basic loop
.for(@adList, @adCode) {
  & {
    .loop(@adI:1) when (@adI =< length(@adList)) {
      @adIndex: @adI - 1;
      @adItem: extract(@adList, @adI);

      @adCode();

      .loop(@adI + 1);
    }
    .loop();
  }
}

.for-each(@adList, @adCode) {
  & {
    .loop(@adI:1) when (@adI =< length(@adList)) {
      @adIndex: @adI - 1;
      @adItem: extract(@adList, @adI);
      @adKey: extract(@adItem, 1);
      @adValue: extract(@adItem, 2);

      @adCode();

      .loop(@adI + 1);
    }
    .loop();
  }
}
