Navigation Tile
Mixins
base
@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
- [function]
get - [variable]
nav-tile-min-width - [variable]
nav-tile-max-width
content
@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; }
media
@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
- [variable]
nav-tile-media-width
media-container
@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
- [variable]
nav-tile-media-height
title-container
@mixin title-container() { ... }@mixin title-container() { display: flex; align-items: center; justify-content: space-between; width: 100%; margin-bottom: spacing.get('s1'); }
title
@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; }
metadata
@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'); }
metadata-sr
@mixin metadata-sr() { ... }@mixin metadata-sr() { @include a11y.visually-hidden; }
Description
Educational navigation tile metadata styles for screen readers
Parameters
None.
description
@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; }
attributes
@mixin attributes() { ... }@mixin attributes() { margin-top: auto; width: 100%; // Ensure attributes container fills the full width }
Description
Educational navigation tile attributes styles
Parameters
None.
attribute
@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; } }
attribute-label
@mixin attribute-label() { ... }@mixin attribute-label() { @include typography.style-as('product-text-1', 'strong'); }
Description
Educational navigation tile attribute label styles
Parameters
None.
base-with-attributes
@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.
Requires
- [variable]
nav-tile-with-attributes-min-width - [variable]
nav-tile-with-attributes-max-width - [variable]
nav-tile-with-attributes-media-height
base
@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]
pseudo-styles - [function]
get - [variable]
nav-tile-min-width - [variable]
nav-tile-max-width - [variable]
border-width - [variable]
border-radius
content
@mixin content() { ... }@mixin content() { color: color.get('action', 'cta', 'alternate', 'text'); text-decoration: inherit; text-wrap: balance; }
pseudo-styles
@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.
Requires
- [function]
get - [variable]
nav-tile-focus-ring-border-width - [variable]
nav-tile-container-border-radius - [variable]
nav-tile-focus-ring-border-distance
Used by
- [mixin]
base
navigation-tile-has-media
@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
- [function]
get - [variable]
nav-tile-with-media-min-width - [variable]
nav-tile-with-media-max-width
media
@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.
Requires
- [variable]
nav-tile-media-width - [variable]
nav-tile-media-border-radius
media-container
@mixin media-container() { ... }@mixin media-container() { display: flex; }
Description
Navigation tile media container styles
Parameters
None.
navigation-tile-vertical
@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
- [function]
get - [variable]
nav-tile-vertical-max-width - [variable]
nav-tile-vertical-min-width
navigation-tile-vertical-media
@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.
Requires
- [variable]
nav-tile-vertical-media-min-width - [variable]
border-radius
navigation-tile-vertical-content
@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
- [function]
get - [variable]
nav-tile-vertical-content-min-width
Css
// Make entire card clickable while keeping link text clean @mixin title-link
// 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
Variables
nav-tile-media-height
$nav-tile-media-height: unit.rem(100px);nav-tile-min-width
$nav-tile-min-width: unit.rem(200px);nav-tile-max-width
$nav-tile-max-width: unit.rem(200px);nav-tile-with-media-min-width
$nav-tile-with-media-min-width: unit.rem(150px);nav-tile-with-media-max-width
$nav-tile-with-media-max-width: unit.rem(230px);nav-tile-media-width
$nav-tile-media-width: 100%;nav-tile-vertical-max-width
$nav-tile-vertical-max-width: unit.rem(109px);nav-tile-vertical-min-width
$nav-tile-vertical-min-width: unit.rem(109px);nav-tile-vertical-media-min-width
$nav-tile-vertical-media-min-width: unit.rem(82px);Description
nav tile vertical variant media min width
Type
Number
Used by
- [mixin]
navigation-tile-vertical-media
nav-tile-with-attributes-min-width
$nav-tile-with-attributes-min-width: unit.rem(250px);Description
Media swatch minimum width when attributes are present
Type
Number
Used by
- [mixin]
base-with-attributes
nav-tile-with-attributes-max-width
$nav-tile-with-attributes-max-width: unit.rem(250px);Description
Media swatch maximum width when attributes are present
Type
Number
Used by
- [mixin]
base-with-attributes
nav-tile-with-attributes-media-height
$nav-tile-with-attributes-media-height: unit.rem(125px);Description
Media swatch height when attributes are present
Type
Number
Used by
- [mixin]
base-with-attributes
link-font-weight
$link-font-weight: 600 !default;Description
Navigation tile font weight
Type
Number
border-width
$border-width: unit.rem(2px);Description
Navigation tile border width
Type
Number
border-radius
$border-radius: border.get('br02');Description
Navigation tile Border radius
Type
Number
nav-tile-media-border-radius
$nav-tile-media-border-radius: border.get('br01');nav-tile-min-width
$nav-tile-min-width: unit.rem(54px);Description
Media swatch minimum width
Type
Number
nav-tile-max-width
$nav-tile-max-width: unit.rem(160px);Description
Media swatch maximum width
Type
Number
nav-tile-with-media-min-width
$nav-tile-with-media-min-width: unit.rem(150px);Description
Media swatch minimum width
Type
Number
nav-tile-with-media-max-width
$nav-tile-with-media-max-width: unit.rem(230px);Description
Media swatch maximum width
Type
Number
nav-tile-media-width
$nav-tile-media-width: unit.rem(54px);Description
Media swatch media width
Type
Number
nav-tile-focus-ring-border-color
$nav-tile-focus-ring-border-color: color.get('text', 'secondary') !default;Description
focus ring border color
Type
Color
nav-tile-focus-ring-border-width
$nav-tile-focus-ring-border-width: unit.rem(2px) !default;nav-tile-focus-ring-border-distance
$nav-tile-focus-ring-border-distance: unit.rem(-6px) !default;nav-tile-container-border-radius
$nav-tile-container-border-radius: unit.rem(12px) !default;nav-tile-vertical-max-width
$nav-tile-vertical-max-width: unit.rem(109px);Description
nav tile vertical variant max width
Type
Number
nav-tile-vertical-min-width
$nav-tile-vertical-min-width: unit.rem(109px);Description
nav tile vertical variant min width
Type
Number
nav-tile-vertical-media-min-width
$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
$nav-tile-vertical-content-min-width: unit.rem(53px);Description
nav tile vertical content min width
Type
Number
Used by
- [mixin]
navigation-tile-vertical-content