@mixin base() { ... }@mixin base() { 
  @include typography.style-as('product-text-1', 'strong');

  color: color.get('ct', 'education-card', 'unselected', 'active', 'text-primary');

  text-decoration: none;

  display: inline-flex;
  align-items: center;
  justify-content: flex-start;
  width: 60%;
  min-width: settings.$nav-tile-min-width;
  max-width: settings.$nav-tile-max-width;
  padding: 0;
  position: relative;
  flex: 0 0 auto;
  overflow: hidden;
  background-color: var(
    --kib-educational-tile-background-color,
    #{color.get('ct', 'education-card', 'unselected', 'active', 'bg-color')}
  );
  flex-direction: column;
  text-align: left;

  outline: transparent;
  border-radius: var(
    --kib-educational-tile-border-radius,
    #{border.get('ct', 'education-card', 'border-radius')}
  );
  cursor: pointer;

  // clickable overlay to make the entire tile clickable while keeping link text clean
  &::after {
    content: '';
    display: block;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    border: var(
        --kib-educational-tile-border-width,
        #{border.get('ct', 'education-card', 'border-width', 'standard')}
      )
      solid
      var(
        --kib-educational-tile-border-color,
        #{color.get('ct', 'education-card', 'unselected', 'active', 'border')}
      );
    border-radius: var(
      --kib-educational-tile-border-radius,
      #{border.get('ct', 'education-card', 'border-radius')}
    );
  }

  // When the inner link receives focus, reflect it on the tile for a card-sized focus ring
  &:focus-within {
    // Only show card-level focus when an inner anchor has :focus-visible (keyboard focus),
    // not merely when the wrapper contains any focusable descendant.
    &:has(a:focus-visible) {
      --kib-educational-tile-border-color: #{color.get(
          'ct',
          'education-card',
          'unselected',
          'focus',
          'border'
        )};
      --kib-educational-tile-background-color: #{color.get(
          'ct',
          'education-card',
          'unselected',
          'focus',
          'bg-color'
        )};
      --kib-educational-tile-border-width: #{border.get(
          'ct',
          'education-card',
          'border-width',
          'focused'
        )};
      text-decoration: underline;
      z-index: 1;
      color: color.get('ct', 'education-card', 'unselected', 'focus', 'text-primary');
    }
  }

  @media (hover: hover) and (pointer: fine) {
    &:hover {
      --kib-educational-tile-border-color: #{color.get(
          'ct',
          'education-card',
          'unselected',
          'hover',
          'border'
        )};
      --kib-educational-tile-background-color: #{color.get(
          'ct',
          'education-card',
          'unselected',
          'hover',
          'bg-color'
        )};

      --kib-educational-tile-focus-ring-border-color: #{color.get(
          'ct',
          'education-card',
          'unselected',
          'hover',
          'border'
        )};
      --kib-educational-tile-border-width: #{border.get(
          'ct',
          'education-card',
          'border-width',
          'focused'
        )};

      text-decoration: none;
      color: color.get('ct', 'education-card', 'unselected', 'hover', 'text-primary');
    }
  }

  &:focus-visible {
    --kib-educational-tile-border-color: #{color.get(
        'ct',
        'education-card',
        'unselected',
        'focus',
        'border'
      )};
    --kib-educational-tile-background-color: #{color.get(
        'ct',
        'education-card',
        'unselected',
        'focus',
        'bg-color'
      )};
    --kib-educational-tile-border-width: #{border.get(
        'ct',
        'education-card',
        'border-width',
        'focused'
      )};
    text-decoration: underline;
    z-index: 1;
    color: color.get('ct', 'education-card', 'unselected', 'focus', 'text-primary');
  }

  &:active {
    --kib-educational-tile-border-color: #{color.get(
        'ct',
        'education-card',
        'unselected',
        'pressed',
        'border'
      )};
    --kib-educational-tile-background-color: #{color.get(
        'ct',
        'education-card',
        'unselected',
        'pressed',
        'bg-color'
      )};
  }

  @media (forced-colors: active) {
    color: LinkText !important;

    --kib-educational-tile-focus-ring-border-color: GrayText !important;

    &:hover {
      --kib-educational-tile-border-color: Highlight !important;
      --kib-educational-tile-background-color: Canvas !important;
    }

    &:focus-visible {
      --kib-educational-tile-focus-ring-border-color: Highlight !important;
    }
  }

  // Respect users who prefer reduced motion by disabling transitions/animations
  @media (prefers-reduced-motion: reduce) {
    &,
    & * {
      transition: none;
      animation: none;
      scroll-behavior: auto;
    }
  }
 }
Description

Educational navigation tile styles

Parameters

None.

Requires
@mixin content() { ... }@mixin content() { 
  @include typography.style-as('product-text-1');

  display: flex;
  flex: 1 1 auto;
  flex-direction: column;

  padding: spacing.get('s4');
  padding-bottom: spacing.get('s4'); // Default bottom padding
  width: 100%;
  vertical-align: top;
 }
Description

Educational navigation tile styles for text content

Parameters

None.

Requires
@mixin media() { ... }@mixin media() { 
  display: block;
  height: auto;
  object-fit: cover;
  object-position: center center;
  max-height: 100%;
  width: settings.$nav-tile-media-width;
  margin-left: auto;
  margin-right: auto;
  padding: 0;
 }
Description

Educational navigation tile media styles

Parameters

None.

Requires
@mixin media-container() { ... }@mixin media-container() { 
  display: flex;
  width: 100%;
  height: settings.$nav-tile-media-height;
 }
Description

Educational navigation tile media container styles

Parameters

None.

Requires
@mixin title-container() { ... }@mixin title-container() { 
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  margin-bottom: spacing.get('s1');
 }
Description

Educational navigation tile title container styles

Parameters

None.

Requires
@mixin title() { ... }@mixin title() { 
  @include typography.style-as('product-text-2', 'strong');
  padding: 0;
  margin-bottom: 0; // Override browser default heading margin
  color: color.get('ct', 'education-card', 'unselected', 'active', 'text-primary');
  align-self: flex-start;
  flex: 1;
 }
Description

Educational navigation tile title styles

Parameters

None.

Requires
@mixin metadata() { ... }@mixin metadata() { 
  @include typography.style-as('product-text-2', 'strong');
  padding: 0;
  color: color.get('ct', 'education-card', 'unselected', 'active', 'text-primary');
  align-self: flex-start;
  flex-shrink: 0;
  margin-left: spacing.get('s2');
 }
Description

Educational navigation tile metadata styles

Parameters

None.

Requires
@mixin metadata-sr() { ... }@mixin metadata-sr() { 
  @include a11y.visually-hidden;
 }
Description

Educational navigation tile metadata styles for screen readers

Parameters

None.

@mixin description() { ... }@mixin description() { 
  @include typography.style-as('product-text-1');
  color: color.get('ct', 'education-card', 'unselected', 'active', 'text-primary');
  padding: 0;
  margin-bottom: spacing.get('s2');
  align-self: flex-start;
 }
Description

Educational navigation tile description styles

Parameters

None.

Requires
@mixin attributes() { ... }@mixin attributes() { 
  margin-top: auto;
  width: 100%; // Ensure attributes container fills the full width
 }
Description

Educational navigation tile attributes styles

Parameters

None.

@mixin attribute() { ... }@mixin attribute() { 
  @include typography.style-as('product-text-1', 'normal');
  margin-top: spacing.get('s2');
  margin-bottom: spacing.get('s2');

  &:last-child {
    margin-bottom: 0;
  }
 }
Description

Educational navigation tile attribute styles

Parameters

None.

Requires
@mixin attribute-label() { ... }@mixin attribute-label() { 
  @include typography.style-as('product-text-1', 'strong');
 }
Description

Educational navigation tile attribute label styles

Parameters

None.

@mixin base-with-attributes() { ... }@mixin base-with-attributes() { 
  min-width: settings.$nav-tile-with-attributes-min-width;
  max-width: settings.$nav-tile-with-attributes-max-width;

  .kib-educational-navigation-tile__media-container {
    height: settings.$nav-tile-with-attributes-media-height;
  }
 }
Description

Educational navigation tile styles when attributes are present

Parameters

None.

@mixin base() { ... }@mixin base() { 
  @include pseudo-styles;
  @include typography.style-as('product-text-1', 'strong');

  color: color.get('text', 'primary');

  --kib-tile-background-color: #{color.get('ui-bg', 'primary')};

  text-decoration: none;
  display: inline-flex;
  align-items: center;
  justify-content: flex-start;
  width: max-content;
  min-width: settings.$nav-tile-min-width;
  max-width: settings.$nav-tile-max-width;
  padding: spacing.get('s3');
  position: relative;
  flex: 0 0 auto;
  background-color: var(
    --kib-tile-background-color,
    #{color.get('action', 'utility', 'alternate', 'primary')}
  );
  gap: spacing.get('s2');
  flex-direction: row;
  text-align: left;
  border: 0;
  outline: transparent;
  box-shadow:
    0 0 0 var(--kib-tile-border-width, #{settings.$border-width})
      var(--kib-tile-border-color, #{color.get('action', 'cta', 'alternate', '03')}) inset,
    0 0 0 var(--kib-tile-outline-width, 0);
  border-radius: settings.$border-radius;
  cursor: pointer;
 }
Description

Navigation tile styles

Parameters

None.

Requires
@mixin content() { ... }@mixin content() { 
  color: color.get('action', 'cta', 'alternate', 'text');
  text-decoration: inherit;
  text-wrap: balance;
 }
Description

Navigation tile styles for text content

Parameters

None.

Requires
@mixin pseudo-styles() { ... }@mixin pseudo-styles() { 
  &::after {
    content: '';
    position: absolute;
    border: solid settings.$nav-tile-focus-ring-border-width var(--kib-tile-focus-ring-border-color);
    border-radius: settings.$nav-tile-container-border-radius;
    top: settings.$nav-tile-focus-ring-border-distance;
    right: settings.$nav-tile-focus-ring-border-distance;
    bottom: settings.$nav-tile-focus-ring-border-distance;
    left: settings.$nav-tile-focus-ring-border-distance;
    display: flex;
    color: inherit;
    z-index: 1;
  }

  &:hover {
    --kib-tile-border-color: #{color.get('action', 'cta', 'alternate', 'text')};

    text-decoration: none;
    color: color.get('action', 'cta', 'alternate', 'text');
  }

  &:focus-visible {
    --kib-tile-border-color: #{color.get('action', 'cta', 'alternate', 'text')};

    text-decoration: underline;
    z-index: 1;
    color: color.get('action', 'cta', 'alternate', 'text');
  }

  &:visited {
    color: color.get('action', 'cta', 'alternate', 'text');
  }

  &:active {
    --kib-tile-border-color: #{color.get('action', 'cta', 'alternate', '03')};
    --kib-tile-background-color: #{color.get('ui-bg', '16')};
    --kib-tile-outline-width: 0;
  }

  @media (forced-colors: active) {
    color: LinkText !important;

    --kib-tile-focus-ring-border-color: GrayText !important;

    &:hover {
      --kib-tile-border-color: Highlight !important;
      --kib-tile-background-color: Canvas !important;
    }

    &:focus-visible {
      --kib-tile-focus-ring-border-color: Highlight !important;
    }
  }
 }
Description

Navigation tile styles for pseudo-elements

Parameters

None.

Used by
@mixin navigation-tile-has-media() { ... }@mixin navigation-tile-has-media() { 
  padding: spacing.get('s2', 's3', 's2', 's2');
  min-width: settings.$nav-tile-with-media-min-width;
  max-width: settings.$nav-tile-with-media-max-width;
 }
Description

Navigation tile with media styles

Parameters

None.

Requires
@mixin media() { ... }@mixin media() { 
  display: block;
  height: auto;
  object-fit: cover;
  object-position: center center;
  max-height: 100%;
  width: settings.$nav-tile-media-width;
  border-radius: settings.$nav-tile-media-border-radius;
  margin-left: auto;
  margin-right: auto;
 }
Description

Navigation tile media styles

Parameters

None.

@mixin media-container() { ... }@mixin media-container() { 
  display: flex;
 }
Description

Navigation tile media container styles

Parameters

None.

@mixin navigation-tile-vertical() { ... }@mixin navigation-tile-vertical() { 
  gap: 0;
  max-width: settings.$nav-tile-vertical-max-width;
  min-width: settings.$nav-tile-vertical-min-width;
  flex-direction: column;
  padding: 0;
  background-color: color.get('ui-bg', '16');
  transition: transform 0.18s cubic-bezier(0.22, 1, 0.36, 1);
  box-shadow: none;

  &:active,
  &:focus-visible {
    padding: inherit;
  }

  &:focus-visible {
    --kib-tile-focus-ring-border-color: #{color.get('action', 'cta', 'alternate', 'text')};

    text-decoration: underline;
    z-index: 1;
  }
 }
Description

Navigation tile vertical modifier styles

Parameters

None.

Requires
@mixin navigation-tile-vertical-media() { ... }@mixin navigation-tile-vertical-media() { 
  padding: 0;
  width: 100%;
  height: 100%;
  min-height: settings.$nav-tile-vertical-media-min-width;
  border-radius: settings.$border-radius settings.$border-radius 0 0;
  aspect-ratio: 4 / 3;

  & img:first-child {
    width: 100%;
    height: auto;
    object-fit: cover;
    object-position: center center;
  }
 }
Description

Navigation tile vertical media styles

Parameters

None.

@mixin navigation-tile-vertical-content() { ... }@mixin navigation-tile-vertical-content() { 
  @include typography.style-as('product-text-1', 'strong');
  padding: spacing.get('s2');
  min-height: settings.$nav-tile-vertical-content-min-width;
  color: color.get('text', 'primary');
  align-self: flex-start;
 }
Description

Navigation tile vertical content styles

Parameters

None.

Requires
// Make entire card clickable while keeping link text clean
@mixin title-link { ... }// Make entire card clickable while keeping link text clean
@mixin title-link { @include typography.style-as('product-text-2', 'strong');
  color: color.get('ct', 'education-card', 'unselected', 'active', 'text-primary');
  position: static;
  outline: none;

  &::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1;
  }

  &:focus-visible {
    color: inherit;
  }

  &:hover {
    color: inherit;
    text-decoration: none;
  }

  &:active {
    color: inherit;
  }

  &:visited {
    color: inherit;
  } }
Description

Educational navigation tile title link styles

$nav-tile-media-height: unit.rem(100px);
Description

Media swatch height

Type

Number

Used by
$nav-tile-min-width: unit.rem(200px);
Description

Media swatch minimum width

Type

Number

Used by
$nav-tile-max-width: unit.rem(200px);
Description

Media swatch maximum width

Type

Number

Used by
$nav-tile-with-media-min-width: unit.rem(150px);
Description

Media swatch minimum width

Type

Number

$nav-tile-with-media-max-width: unit.rem(230px);
Description

Media swatch maximum width

Type

Number

$nav-tile-media-width: 100%;
Description

Media swatch media width

Type

Number

Used by
$nav-tile-vertical-max-width: unit.rem(109px);
Description

nav tile vertical variant max width

Type

Number

$nav-tile-vertical-min-width: unit.rem(109px);
Description

nav tile vertical variant min width

Type

Number

$nav-tile-vertical-media-min-width: unit.rem(82px);
Description

nav tile vertical variant media min width

Type

Number

$nav-tile-with-attributes-min-width: unit.rem(250px);
Description

Media swatch minimum width when attributes are present

Type

Number

Used by
$nav-tile-with-attributes-max-width: unit.rem(250px);
Description

Media swatch maximum width when attributes are present

Type

Number

Used by
$nav-tile-with-attributes-media-height: unit.rem(125px);
Description

Media swatch height when attributes are present

Type

Number

Used by
$link-font-weight: 600 !default;
Description

Navigation tile font weight

Type

Number

$border-width: unit.rem(2px);
Description

Navigation tile border width

Type

Number

$border-radius: border.get('br02');
Description

Navigation tile Border radius

Type

Number

$nav-tile-media-border-radius: border.get('br01');
Description

Navigation Tile Media border radius for media swatch

Type

Number

Used by
$nav-tile-min-width: unit.rem(54px);
Description

Media swatch minimum width

Type

Number

$nav-tile-max-width: unit.rem(160px);
Description

Media swatch maximum width

Type

Number

$nav-tile-with-media-min-width: unit.rem(150px);
Description

Media swatch minimum width

Type

Number

$nav-tile-with-media-max-width: unit.rem(230px);
Description

Media swatch maximum width

Type

Number

$nav-tile-media-width: unit.rem(54px);
Description

Media swatch media width

Type

Number

$nav-tile-focus-ring-border-color: color.get('text', 'secondary') !default;
Description

focus ring border color

Type

Color

$nav-tile-focus-ring-border-width: unit.rem(2px) !default;
Description

focus ring border width

Type

Number

Used by
$nav-tile-focus-ring-border-distance: unit.rem(-6px) !default;
Description

focus ring border distance

Type

Number

Used by
$nav-tile-container-border-radius: unit.rem(12px) !default;
Description

container border radius

Type

Number

Used by
$nav-tile-vertical-max-width: unit.rem(109px);
Description

nav tile vertical variant max width

Type

Number

$nav-tile-vertical-min-width: unit.rem(109px);
Description

nav tile vertical variant min width

Type

Number

$nav-tile-vertical-media-min-width: unit.rem(82px);
Description

nav tile vertical variant media min width

Type

Number

$nav-tile-vertical-content-min-width: unit.rem(53px);
Description

nav tile vertical content min width

Type

Number