No notes defined.
<div class="grid grid-4-cols@tablet-wide">
<div>
<div class="card card--flex card--maroon">
<figure class="card__figure">
<img src="https://picsum.photos/480/240?random=1" alt="" />
</figure>
<div class="card__content">
<h3 class="card__title h5">
<a href="#" class="link--stretched">Graduates give Staffs Uni star role in popular app</a>
</h3>
<p>
<time class="strong">23 October 2024</time>
</p>
<p>The founders of an immersive storytelling app have returned to their university stomping ground to film their latest episode.</p>
</div>
</div>
</div>
<div>
<div class="card card--flex card--red">
<figure class="card__figure">
<img src="https://picsum.photos/480/240?random=2" alt="" />
</figure>
<div class="card__content">
<h3 class="card__title h5">
<a href="#" class="link--stretched">Enjoying the View? How computer games can help evaluate landscapes</a>
</h3>
<p>
<time class="strong">20 October 2024</time>
</p>
<p>Staffordshire University is going global with a programme packed full of free events to start the new decade.</p>
</div>
</div>
</div>
<div>
<div class="card card--flex card--slate">
<figure class="card__figure">
<img src="https://picsum.photos/480/240?random=2" alt="" />
</figure>
<div class="card__content">
<h3 class="card__title h5">
<a href="#" class="link--stretched">“It's Beautiful to be Old” Professor tells Vatican</a>
</h3>
<p>
<time class="strong">19 October 2024</time>
</p>
<p>2020 marks the International Year of the Nurse and Midwife, and Staffordshire University is joining colleagues across the globe to shine a spotlight on the sector. Celebrations kick off with a talk this week by Visiting Professor Ann-Marie Cannaby, Chief Nurse at the Royal Wolverhampton Hospital, at the University’s Centre of Excellence in Healthcare Education, Stafford.Two hundred years may have passed since the birth of Florence Nightingale, but patient care and safety remain the most important influencing factors within the fields of nursing and midwifery. Professor Cannaby will use her keynote presentation to explore curriculum developments.</p>
</div>
</div>
</div>
<div>
<div class="card card--flex card--maroon">
<figure class="card__figure">
<img src="https://picsum.photos/480/240?random=3" alt="" />
</figure>
<div class="card__content">
<h3 class="card__title h5">
<a href="#" class="link--stretched">Research into poverty in Stoke-on-Trent gets new funding boost</a>
</h3>
<p>
<time class="strong">17 October 2024</time>
</p>
<p></p>
</div>
</div>
</div>
</div>
<div class="grid grid-4-cols@tablet-wide">
<div>
<div class="card card--flex card--maroon">
<figure class="card__figure">
<img src="https://picsum.photos/480/240?random=1" alt=""/>
</figure>
<div class="card__content">
<h3 class="card__title h5">
<a href="#" class="link--stretched">{{ placeholderHeadline }}</a>
</h3>
<p>
<time class="strong">23 October 2024</time>
</p>
<p>{{ placeholderPara1 }}</p>
</div>
</div>
</div>
<div>
<div class="card card--flex card--red">
<figure class="card__figure">
<img src="https://picsum.photos/480/240?random=2" alt=""/>
</figure>
<div class="card__content">
<h3 class="card__title h5">
<a href="#" class="link--stretched">{{ placeholderHeadline2 }}</a>
</h3>
<p>
<time class="strong">20 October 2024</time>
</p>
<p>{{ placeholderPara2 }}</p>
</div>
</div>
</div>
<div>
<div class="card card--flex card--slate">
<figure class="card__figure">
<img src="https://picsum.photos/480/240?random=2" alt=""/>
</figure>
<div class="card__content">
<h3 class="card__title h5">
<a href="#" class="link--stretched">{{ placeholderHeadline3 }}</a>
</h3>
<p>
<time class="strong">19 October 2024</time>
</p>
<p>{{ placeholderPara3 }}</p>
</div>
</div>
</div>
<div>
<div class="card card--flex card--maroon">
<figure class="card__figure">
<img src="https://picsum.photos/480/240?random=3" alt=""/>
</figure>
<div class="card__content">
<h3 class="card__title h5">
<a href="#" class="link--stretched">{{ placeholderHeadline4 }}</a>
</h3>
<p>
<time class="strong">17 October 2024</time>
</p>
<p>{{ placeholderPara4 }}</p>
</div>
</div>
</div>
</div>
$card__internal-spacing: $spacing-sm;
.card {
// $theme-colours: see __vars/colours
display: block;
position: relative;
--accent-color: #{$primary};
margin-bottom: $spacing-xl;
@include clearfix;
a:not(.button) {
text-decoration: none;
border-bottom: none;
&:hover {
text-decoration: underline;
}
}
p {
margin-bottom: $card__internal-spacing;
}
&__content {
padding: 0 calc(#{$card__internal-spacing} + 2.5%);
> :first-child {
margin-top: 0;
}
> :last-child {
margin-bottom: 0;
}
}
&__title {
margin-top: 0;
margin-bottom: $spacing-md;
a {
color: #{$primary};
color: var(--accent-color);
}
}
&__figure {
&--video {
position: relative;
background-color: #CCC;
&:hover {
cursor: pointer;
}
&:after {
content: '';
position: absolute;
width: $spacing-4xl;
height: $spacing-4xl;
max-width: 50%;
max-height: 50%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: url('#{$image-theme-directory-icon}/icon-play-circle-neutral-light.svg') no-repeat center center;
background-size: contain;
z-index: 1;
pointer-events: none;
}
& img {
color: #CCC;
}
}
}
&__clearing-flag {
background-color: $red;
color: #FFF;
padding: 0.25rem 0.5rem;
font-weight: 400;
}
// CG: A card across multiple days will clash with the one below if there is no image, so add a minimum height if necessary
&--multiple-days {
min-height: 210px;
}
//-- Child elements affected by accent colour
.blockquote__title {
color: var(--accent-color);
}
.meta--inline-dd,
.meta--inline {
dd:before {
color: var(--accent-color);
}
}
//-- ACCENT THEMES
@each $name, $value in $card-accent-colors {
&--#{$name} {
--accent-color: #{$value};
&.card--ksp .card--ksp__icon-container > .icon svg * {
@if (choose-contrast-color($value) == white) {
stroke: white!important;
fill: white!important;
color: white;
}
@else {
stroke: black!important;
fill: black!important;
color: black;
}
}
}
}
@each $name, $value in $theme-colours {
&--#{$name} {
--accent-color: #{$value};
svg {
fill: #{$value};
}
}
}
&--bg-offwhite {
background-color: $grey-50-pc;
& .card__content {
padding: $card__internal-spacing * 2;
}
& .card__figure {
margin-bottom: 0;
}
}
}
a.card {
text-decoration: none;
.card__title {
color: #{$primary};
color: var(--accent-color);
}
&:hover {
color: $text-color;
.card__title {
text-decoration: underline;
}
}
}
//-- VARIANTS
.card--flex {
display: flex;
flex-wrap: wrap;
align-items: flex-start;
flex-direction: row-reverse;
.card__figure {
flex: 1 1 33%;
}
.card__content {
flex: 99 1 17.5em;
}
}
.card--flex-overlap {
display: flex;
flex-wrap: wrap;
align-items: flex-start;
flex-direction: row-reverse;
padding-bottom: $spacing-sm;
.card__figure {
flex: 1 1 33%;
}
.card__content {
flex: 99 1 17.5em;
}
.card__figure {
margin-bottom: -#{$spacing-sm};
}
}
// In Razor, attach background colours only if there are more than one
.card--testimonial {
padding-bottom: $card__internal-spacing;
& .cite {
margin-bottom: $spacing-2xs;
color: var(--accent-color);
}
@each $name, $value in $testimonial-card-colors {
&.card--bg-#{$name} {
background-color: map_get($value, "background");
color: map_get($value, "color");
padding: $spacing-2xs $spacing-lg $spacing-lg $spacing-lg;
@media (min-width: map_get($breakpoint-stages, 'mobile-wide')) {
& .card__content {
padding-left: 0;
margin-left: -$spacing-4xl;
}
}
& .blockquote__prose {
margin-top: 0;
}
& q {
color: map_get($value, "color");
}
& strong, & .cite {
color: map_get($value, "contrast-color");
}
& .blockquote__figure img {
border-bottom: 0;
}
}
}
.blockquote__figure img {
border-bottom: $spacing-2xs solid var(--accent-color);
}
}
.card--pullquote {
padding-bottom: $card__internal-spacing;
margin-left: 5%;
&:before {
content: '';
display: block;
float: left;
width: 5%;
margin-right: 1%;
height: 0;
padding-bottom: 5%;
margin-left: -5%;
background: url('#{$image-theme-directory-icon}/icon-quote-primary.svg') no-repeat center center;
background-size: contain;
}
// These themes need to be updated 'manually' for now, as we're using an svg,
// and I can't think of a clever way to update dynamically based on the accent var
// something using inline SVG use/fill, or a mask?
// Don't forget to add the SVG to the filesystem!
@each $name, $value in $card-accent-colors {
&.card--#{$name} {
&:before {
background: transparent url('#{$image-theme-directory-icon}/icon-quote-#{$name}.svg') no-repeat center center;
background-size: contain;
}
}
}
}
.card--contact {
ul.list--inline {
padding-left: 1.5em;
li a {
text-decoration: none!important;
}
.icon {
font-size: 1.5rem;
}
}
ul.list--icon-bullets {
li a {
text-decoration: none!important;
border-bottom: 1px solid $grey--light
}
}
}
.card--course {
border-left: $border-accent-width solid $primary;
border-color: var(--accent-color);
}
.card--result {
// this exists, but doesn't need anything specific (yet)
}
.card--profile {
padding: $spacing-md;
/* Needs:
grey and teal
grey and burgundy
teal and neon
burgundy and neon
*/
@each $name, $value in $profile-card-themes {
&.card--#{$name} {
background: map_get($value, "background");
border-bottom: $spacing-2xs solid map_get($value, "accent-color");
margin-left: $spacing-2xl;
@if (choose-contrast-color(map_get($value, "background")) == white) {
color: white;
& .button {
color: white;
}
}
& .button--outline {
color: map_get($value, "accent-color");
border-color: map_get($value, "accent-color");
&:hover {
color: black;
}
}
& .title, & .strong {
color: map_get($value, "accent-color");
}
}
}
&.card--flex {
flex-direction: row;
}
& .card__figure {
margin-left: auto;
margin-right: auto;
max-width: 15rem;
/*@media (max-width: (map_get($breakpoint-stages, 'tablet-wide'))) {
flex: 1 1 25%;
}*/
}
& .title {
margin-bottom: 0;
}
}
.card--ksp {
color: $neutral--primary;
border-left: none;
&__icon-container {
display: table;
border-radius: 50%;
background-color: var(--accent-color);
}
& .icon {
display: table-cell;
vertical-align: middle;
width: 2em;
height: 2em;
img, svg {
width: 60%;
height: 60%;
vertical-align: unset;
}
svg {
fill: var(--accent-color);
}
}
& .card__title {
color: inherit;
margin-top: $card__internal-spacing * 2;
}
&.card--light {
& .card__title, & p {
color: white;
}
}
}
.card--event {
margin-left: $spacing-4xl;
.card__figure {
margin-bottom: #{$spacing-xs};
}
.card__date {
position: absolute;
top: 0;
left: -$spacing-4xl;
width: $spacing-4xl;
@include typescale('xs');
padding: $spacing-sm 0;
color: white;
background: $primary;
background: var(--accent-color);
line-height: 1;
text-align: center;
box-sizing: border-box;
}
.link--stretched h2 {
color: $teal;
}
a.link--stretched:hover h2 {
color: $red;
}
.card__day {
display: block;
font-weight: 500;
@include typescale('xl');
@media (min-width: map_get($breakpoint-stages, 'mobile-wide')) {
@include typescale('3xl');
}
}
.card__date-separator {
display: block;
font-weight: 500;
@include typescale('xl');
padding: $spacing-xs 0;
}
@media (min-width: (map_get($breakpoint-stages, 'tablet-wide') + 5rem)) {
margin-left: $spacing-5xl;
.card__date {
left: -$spacing-5xl;
width: $spacing-5xl;
}
.card__day {
@include typescale('5xl');
}
}
}
.card--with-logo {
border: 0;
& .card__content {
max-width: 80%;
background-color: $grey-50-pc;
padding: $spacing-xl $spacing-xl $spacing-2xl $spacing-xl;
}
& a:hover,& a:hover .card__content p {
text-decoration: none;
}
& img {
float: right;
margin-top: -$spacing-xl;
max-height: 100px;
box-shadow: 2px 2px 5px rgba(0,0,0,0.5);
background: #FFF;
}
}
.card__video.card__figure {
@media (max-width: map_get($breakpoint-stages, 'mobile-wide')) {
padding-bottom: 50%;
position: relative;
height: 0;
}
& iframe {
width: 100%;
height: 100%;
@media (max-width: map_get($breakpoint-stages, 'mobile-wide')) {
padding-bottom: 50%;
position: absolute;
}
}
}
.card--virtual-tour {
min-height: 20rem;
position: relative;
overflow: hidden;
flex-direction: row;
background-color: $grey-50-pc;
background-size: cover!important;
background-position: center center;
background-repeat: no-repeat;
border-left: none;
border: $spacing-4xs solid $teal;
@media (max-width: map_get($breakpoint-stages, 'mobile-wide')) {
background-image: none!important;
background-color: $grey-50-pc!important;
}
.card__content {
max-width: 25rem;
z-index: 1;
background: rgba(255,255,255,0.9);
padding: $spacing-xl $spacing-xl $spacing-xs $spacing-xl;
@media (min-width: map_get($breakpoint-stages, 'mobile-wide')) {
margin-top: $spacing-2xl;
margin-left: $spacing-2xl;
}
> .title {
color: $teal;
}
> :last-child {
margin-top: $spacing-md;
}
}
}
.grid-2-cols\@tablet {
& .card__video {
&.card__figure {
padding-bottom: 50%;
position: relative;
height: 0;
& iframe {
position: absolute;
}
}
}
}