forked from phc/website
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
822 lines
18 KiB
SCSS
822 lines
18 KiB
SCSS
// $news-bg: #fffbeb;
|
|
// $news-accent-bg: #f8e8b1;
|
|
|
|
@import './mixins.scss';
|
|
|
|
@layer component {
|
|
//
|
|
// Components - for complex parts of the UI like search bars or compound buttons
|
|
//
|
|
|
|
.material-symbols-outlined {
|
|
font-family: 'Material Symbols Outlined Variable';
|
|
font-weight: normal;
|
|
font-style: normal;
|
|
line-height: 1;
|
|
text-transform: none;
|
|
letter-spacing: normal;
|
|
word-wrap: normal;
|
|
white-space: nowrap;
|
|
direction: ltr;
|
|
|
|
display: inline-grid;
|
|
place-content: center;
|
|
|
|
font-size: 24px;
|
|
font-variation-settings: 'FILL' 0, 'wght' 300, 'GRAD' 0, 'opsz' 24;
|
|
|
|
max-width: 32px;
|
|
}
|
|
|
|
.title {
|
|
font-family: 'Iosevka', monospace;
|
|
font-weight: 700;
|
|
font-size: 28px;
|
|
}
|
|
|
|
.search {
|
|
width: 100%;
|
|
height: 2.5rem;
|
|
|
|
@include neo-brutalist-card;
|
|
|
|
display: grid;
|
|
grid-template-columns: 1fr auto;
|
|
align-items: center;
|
|
|
|
cursor: pointer;
|
|
|
|
background: #fff;
|
|
|
|
&:hover,
|
|
&:hover input[type='text'] {
|
|
background: #f8f8f8;
|
|
}
|
|
|
|
input[type='text'] {
|
|
border: none;
|
|
box-shadow: none;
|
|
outline: none;
|
|
height: 100%;
|
|
|
|
padding: 0;
|
|
padding-left: 0.35rem;
|
|
}
|
|
|
|
.material-symbols-outlined {
|
|
padding: 0 0.5rem;
|
|
}
|
|
}
|
|
|
|
.flex-column {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 1rem;
|
|
}
|
|
|
|
.flex-row {
|
|
display: flex;
|
|
flex-direction: row;
|
|
gap: 1rem;
|
|
}
|
|
|
|
// just to know for reference
|
|
.fake-masonry {
|
|
display: grid;
|
|
grid-template-columns: repeat(var(--columns), 1fr);
|
|
grid-auto-flow: dense;
|
|
|
|
& > * {
|
|
grid-row: span var(--masonry-height);
|
|
}
|
|
}
|
|
|
|
.search-results {
|
|
width: 100%;
|
|
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 1rem;
|
|
|
|
.search-result {
|
|
width: 100%;
|
|
|
|
display: grid;
|
|
grid-template-columns: auto auto 1fr auto;
|
|
grid-template-areas: 'icon text . right';
|
|
|
|
align-items: center;
|
|
|
|
gap: 0.5rem;
|
|
|
|
padding: 0.5rem;
|
|
|
|
background: #fff;
|
|
|
|
@include neo-brutalist-card;
|
|
|
|
a {
|
|
display: contents;
|
|
}
|
|
|
|
& > .icon {
|
|
grid-area: icon;
|
|
display: grid;
|
|
}
|
|
|
|
& > .text {
|
|
grid-area: text;
|
|
display: grid;
|
|
}
|
|
|
|
& > .right {
|
|
grid-area: right;
|
|
display: grid;
|
|
}
|
|
}
|
|
}
|
|
|
|
.appunti-scrollable {
|
|
display: flex;
|
|
overflow-x: auto;
|
|
|
|
.appunti-list {
|
|
padding: 2px;
|
|
padding-bottom: 1rem;
|
|
}
|
|
}
|
|
|
|
.appunti-list {
|
|
display: grid;
|
|
grid-auto-flow: column;
|
|
|
|
gap: 3rem;
|
|
|
|
overflow-x: auto;
|
|
|
|
max-width: 100%;
|
|
}
|
|
|
|
.appunti-item {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.25rem;
|
|
|
|
color: #444;
|
|
|
|
& > .thumbnail {
|
|
width: 10rem;
|
|
aspect-ratio: 10 / 14;
|
|
background: #d0d0d0;
|
|
|
|
@include neo-brutalist-card($hoverable: true);
|
|
}
|
|
|
|
& > .thumbnail + * {
|
|
font-weight: 700;
|
|
padding-top: 0.25rem;
|
|
}
|
|
|
|
& > .title,
|
|
& > .course,
|
|
& > .author,
|
|
& > .course-year {
|
|
padding-left: 0.5rem;
|
|
font-size: 16px;
|
|
}
|
|
}
|
|
|
|
.article-list {
|
|
display: grid;
|
|
grid-auto-flow: row;
|
|
|
|
max-width: 100%;
|
|
|
|
gap: 2rem;
|
|
grid-template-columns: repeat(auto-fill, minmax(25rem, 1fr));
|
|
grid-auto-rows: auto;
|
|
|
|
.article {
|
|
display: grid;
|
|
grid-template-rows: auto auto auto;
|
|
|
|
background: var(--card-bg, var(--project-card-bg));
|
|
color: #000e;
|
|
|
|
@include neo-brutalist-card($size: 3px, $offset: 9px);
|
|
|
|
row-gap: 0.5rem;
|
|
padding: 1rem;
|
|
|
|
.description {
|
|
font-size: 16px;
|
|
}
|
|
|
|
.tags {
|
|
display: flex;
|
|
gap: 0.5rem;
|
|
flex-wrap: wrap;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
color: #555;
|
|
}
|
|
}
|
|
}
|
|
|
|
.news-list {
|
|
display: grid;
|
|
grid-auto-flow: column;
|
|
|
|
// .news-item {
|
|
// background: $news-bg;
|
|
// color: #111;
|
|
|
|
// @include neo-brutalist-card($size: 3px, $offset: 9px);
|
|
|
|
// display: flex;
|
|
// flex-direction: column;
|
|
|
|
// width: 22rem;
|
|
// max-height: 27rem;
|
|
|
|
// overflow: hidden;
|
|
|
|
// ::-webkit-scrollbar {
|
|
// width: 10px;
|
|
// }
|
|
|
|
// ::-webkit-scrollbar-thumb {
|
|
// background-color: #c67e14;
|
|
// border: 2px solid #222;
|
|
|
|
// &:hover {
|
|
// background-color: #e69419;
|
|
// }
|
|
// }
|
|
|
|
// a {
|
|
// font-weight: 600;
|
|
// text-decoration: none;
|
|
// color: #c67e14;
|
|
|
|
// &:hover {
|
|
// text-decoration: underline solid 2px;
|
|
// }
|
|
// }
|
|
|
|
// & > .title {
|
|
// padding: 1rem;
|
|
// background: $news-accent-bg;
|
|
// line-height: 1;
|
|
// font-size: 26px;
|
|
// }
|
|
|
|
// a.title {
|
|
// color: #83530c;
|
|
// }
|
|
|
|
// & > .abstract {
|
|
// flex-grow: 1;
|
|
|
|
// padding: 1rem;
|
|
|
|
// overflow-y: auto;
|
|
|
|
// @extend .text;
|
|
// }
|
|
|
|
// & > .content {
|
|
// display: flex;
|
|
// padding: 1rem;
|
|
// flex-direction: column;
|
|
// gap: 0.5rem;
|
|
|
|
// background: #fff8da;
|
|
|
|
// & > .continue {
|
|
// padding: 1rem;
|
|
|
|
// display: grid;
|
|
// align-items: end;
|
|
// justify-content: end;
|
|
// }
|
|
|
|
// & > .description {
|
|
// font-size: 16px;
|
|
// line-height: 1.5;
|
|
|
|
// flex-grow: 1;
|
|
// }
|
|
|
|
// & > .tags {
|
|
// display: flex;
|
|
// gap: 0.5rem;
|
|
// flex-wrap: wrap;
|
|
// font-size: 14px;
|
|
// color: #555;
|
|
// }
|
|
|
|
// & > .date {
|
|
// font-size: 14px;
|
|
// font-style: italic;
|
|
// font-weight: 600;
|
|
// color: #0008;
|
|
// }
|
|
|
|
// & > .author {
|
|
// font-weight: 600;
|
|
// font-size: 15px;
|
|
// color: #555;
|
|
// }
|
|
// }
|
|
// }
|
|
}
|
|
|
|
.timeline {
|
|
display: grid;
|
|
|
|
--timeline-track-size: 6rem;
|
|
--timeline-thickness: 6px;
|
|
--timeline-color: #333;
|
|
|
|
max-width: 120ch;
|
|
grid-template-columns: 1fr var(--timeline-track-size) 1fr;
|
|
|
|
@media screen and (max-width: $screen-desktop-min) {
|
|
--timeline-track-size: 3rem;
|
|
grid-template-columns: var(--timeline-track-size) 1fr;
|
|
}
|
|
|
|
& > .timeline-item {
|
|
position: relative;
|
|
display: grid;
|
|
|
|
& > .content {
|
|
display: grid;
|
|
grid-template-columns: auto;
|
|
padding: 2rem 1rem;
|
|
|
|
@media screen and (max-width: $screen-desktop-min) {
|
|
padding: 1rem 1rem 1rem 0;
|
|
}
|
|
|
|
& > .title {
|
|
font-size: 20px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
& > .date {
|
|
font-size: 32px;
|
|
font-weight: 400;
|
|
color: #555;
|
|
}
|
|
}
|
|
|
|
// timeline vertical line
|
|
&::before {
|
|
content: '';
|
|
|
|
position: absolute;
|
|
top: 0;
|
|
bottom: 0;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
width: var(--timeline-thickness);
|
|
|
|
background: var(--timeline-color);
|
|
}
|
|
|
|
&:first-child::before {
|
|
top: 50%;
|
|
}
|
|
|
|
&:last-child::before {
|
|
bottom: 50%;
|
|
}
|
|
|
|
// timeline circle
|
|
&::after {
|
|
content: '';
|
|
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
width: 1rem;
|
|
height: 1rem;
|
|
border-radius: 50%;
|
|
|
|
background: var(--timeline-color);
|
|
}
|
|
|
|
&::before,
|
|
&::after {
|
|
grid-column: 1 / span 1;
|
|
}
|
|
|
|
@media screen and (min-width: $screen-desktop-min) {
|
|
&:nth-child(odd)::before {
|
|
grid-column: 2 / span 1;
|
|
}
|
|
|
|
&:nth-child(even)::before {
|
|
grid-column: 1 / span 1;
|
|
}
|
|
|
|
&:nth-child(odd)::after {
|
|
grid-column: 2 / span 1;
|
|
}
|
|
|
|
&:nth-child(even)::after {
|
|
grid-column: 1 / span 1;
|
|
}
|
|
}
|
|
|
|
.dropdown {
|
|
@include neo-brutalist-card;
|
|
|
|
max-width: 15rem;
|
|
position: absolute;
|
|
bottom: calc(-10rem - 1px);
|
|
left: 50%;
|
|
transform: translateX(calc(-50% - var(--timeline-track-size) / 2));
|
|
border-top: none;
|
|
border-radius: 0 0 0.5rem 0.5rem;
|
|
|
|
@media screen and (max-width: $screen-desktop-min) {
|
|
@include neo-brutalist-card;
|
|
|
|
position: static;
|
|
transform: none;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
}
|
|
}
|
|
@media screen and (min-width: $screen-desktop-min) {
|
|
&:nth-child(odd) {
|
|
grid-column: 1 / span 2;
|
|
grid-template-columns: 1fr var(--timeline-track-size);
|
|
|
|
& > .content {
|
|
grid-column: 1;
|
|
}
|
|
|
|
.dropdown {
|
|
left: auto;
|
|
right: 50%;
|
|
transform: translateX(calc(50% - var(--timeline-track-size) / 2));
|
|
}
|
|
}
|
|
|
|
&:nth-child(even) {
|
|
grid-column: 2 / span 2;
|
|
grid-template-columns: var(--timeline-track-size) 1fr;
|
|
|
|
& > .content {
|
|
grid-column: 2;
|
|
}
|
|
|
|
.dropdown {
|
|
left: 50%;
|
|
transform: translateX(calc(-50% + var(--timeline-track-size) / 2));
|
|
}
|
|
}
|
|
}
|
|
|
|
@media screen and (max-width: $screen-desktop-min) {
|
|
grid-column: 1 / span 2;
|
|
|
|
grid-template-columns: var(--timeline-track-size) 1fr;
|
|
|
|
& > .content {
|
|
grid-column: 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// Cards
|
|
//
|
|
|
|
.card {
|
|
display: grid;
|
|
|
|
--card-base-internal: var(--card-base, #f8f8f8);
|
|
|
|
background: var(--card-base-internal);
|
|
color: color-mix(in srgb, var(--card-base-internal), #000 80%);
|
|
|
|
@include neo-brutalist-card($size: 3px, $offset: 9px);
|
|
|
|
row-gap: 0.5rem;
|
|
padding: 1rem;
|
|
|
|
// Variants
|
|
|
|
&.large {
|
|
padding: 2rem;
|
|
|
|
@include neo-brutalist-card($size: 4px, $offset: 8px);
|
|
|
|
row-gap: 1rem;
|
|
|
|
& > .title {
|
|
font-size: 36px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
& > .text {
|
|
font-size: 18px;
|
|
}
|
|
}
|
|
|
|
// Child Items
|
|
|
|
& > .title {
|
|
color: color-mix(in srgb, var(--card-base-internal), #000 75%);
|
|
font-size: 26px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
& > .text {
|
|
font-size: 16px;
|
|
|
|
&.small {
|
|
color: color-mix(in srgb, var(--card-base-internal), #000 75%);
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
&.dimmed {
|
|
color: color-mix(in srgb, var(--card-base-internal), #000 50%);
|
|
}
|
|
}
|
|
|
|
& > .tags {
|
|
display: flex;
|
|
gap: 0.5rem;
|
|
flex-wrap: wrap;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
color: #555;
|
|
|
|
a {
|
|
color: color-mix(in srgb, var(--card-base-internal), #000 60%);
|
|
font-weight: 600;
|
|
|
|
&:hover {
|
|
text-decoration: underline solid 2px;
|
|
}
|
|
}
|
|
}
|
|
|
|
a:hover {
|
|
text-decoration: underline solid 2px;
|
|
}
|
|
|
|
a.title {
|
|
&:hover {
|
|
text-decoration: underline solid 3px;
|
|
}
|
|
}
|
|
|
|
@media screen and (max-width: $screen-desktop-min) {
|
|
padding: 0.9rem;
|
|
|
|
&.large {
|
|
padding: 1.25rem;
|
|
|
|
& > .title {
|
|
font-size: 32px;
|
|
}
|
|
|
|
& > .text {
|
|
font-size: 16px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// Card List
|
|
//
|
|
|
|
.card-list {
|
|
display: grid;
|
|
grid-auto-flow: row;
|
|
|
|
width: 100%;
|
|
max-width: 100%;
|
|
|
|
gap: 2rem;
|
|
grid-template-columns: repeat(auto-fit, minmax(25rem, auto));
|
|
grid-auto-rows: auto;
|
|
|
|
justify-content: center;
|
|
|
|
& > .card {
|
|
max-width: 25rem;
|
|
}
|
|
|
|
@media screen and (max-width: $screen-desktop-min) {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
|
|
.show-more {
|
|
place-self: center;
|
|
}
|
|
|
|
.search-bar {
|
|
display: grid;
|
|
grid-template-columns: auto 1fr;
|
|
|
|
width: 100%;
|
|
|
|
gap: 1rem;
|
|
|
|
@media screen and (max-width: $screen-desktop-min) {
|
|
grid-template-columns: 1fr;
|
|
|
|
& > .search {
|
|
grid-row: 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* .filter-select {
|
|
width: 100%;
|
|
height: 2.5rem;
|
|
|
|
@include neo-brutalist-card;
|
|
|
|
display: grid;
|
|
align-items: center;
|
|
grid-auto-flow: column;
|
|
|
|
cursor: pointer;
|
|
|
|
--filter-bg-color-hover: color-mix(in srgb, var(--filter-bg-color, #ddd), #000 10%);
|
|
|
|
background: var(--filter-bg-color, #ddd);
|
|
|
|
&:hover,
|
|
&:hover select {
|
|
background: var(--filter-bg-color-hover);
|
|
}
|
|
|
|
.material-symbols-outlined {
|
|
padding: 0 0.35rem;
|
|
}
|
|
|
|
select {
|
|
border: none;
|
|
box-shadow: none;
|
|
outline: none;
|
|
height: 100%;
|
|
appearance: none;
|
|
|
|
cursor: pointer;
|
|
|
|
padding: 0;
|
|
|
|
background: var(--filter-bg-color, #ddd);
|
|
}
|
|
} */
|
|
|
|
.combobox {
|
|
width: 100%;
|
|
height: 2.5rem;
|
|
position: relative;
|
|
padding: 0 0.25rem 0 0.25rem;
|
|
|
|
@include neo-brutalist-card;
|
|
|
|
cursor: pointer;
|
|
|
|
--filter-bg-color-hover: color-mix(in srgb, var(--filter-bg-color, #ddd), #000 10%);
|
|
|
|
background: var(--filter-bg-color, #ddd);
|
|
|
|
.material-symbols-outlined {
|
|
padding: 0 0.35rem;
|
|
}
|
|
|
|
.selected {
|
|
height: 100%;
|
|
gap: 0.25rem;
|
|
display: grid;
|
|
grid-auto-flow: column;
|
|
grid-template-columns: 1fr auto;
|
|
align-items: center;
|
|
|
|
.content {
|
|
display: grid;
|
|
grid-auto-flow: column;
|
|
align-items: center;
|
|
justify-content: start;
|
|
}
|
|
}
|
|
|
|
.dropdown {
|
|
position: absolute;
|
|
z-index: 10;
|
|
top: calc(100% + 8px);
|
|
left: -3px;
|
|
|
|
@include neo-brutalist-card;
|
|
|
|
background: #fff;
|
|
|
|
.option {
|
|
height: 2rem;
|
|
padding: 0 0.5rem 0 0.25rem;
|
|
display: grid;
|
|
grid-auto-flow: column;
|
|
align-items: center;
|
|
justify-content: start;
|
|
&:hover {
|
|
background: #ddd;
|
|
}
|
|
}
|
|
}
|
|
|
|
@media screen and (max-width: $screen-desktop-min) {
|
|
.dropdown {
|
|
left: 3px;
|
|
right: 3px;
|
|
|
|
top: calc(100% + 9px);
|
|
}
|
|
}
|
|
}
|
|
|
|
.gallery-collage {
|
|
// display: flex;
|
|
// flex-wrap: wrap;
|
|
|
|
// width: 64rem;
|
|
|
|
width: 100%;
|
|
max-width: 100%;
|
|
|
|
--cell-size: 6rem;
|
|
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, calc(var(--cell-size)));
|
|
grid-auto-rows: calc(var(--cell-size));
|
|
|
|
grid-auto-flow: dense;
|
|
gap: 1rem;
|
|
|
|
place-content: center;
|
|
// align-items: center;
|
|
|
|
@media screen and (max-width: $screen-desktop-min) {
|
|
grid-template-columns: auto;
|
|
grid-template-rows: auto;
|
|
grid-auto-rows: auto;
|
|
}
|
|
|
|
& > .card {
|
|
padding: 3px;
|
|
|
|
overflow: hidden;
|
|
|
|
width: 100%;
|
|
height: 100%;
|
|
|
|
grid-column: span var(--cols, 1);
|
|
grid-row: span var(--rows, 1);
|
|
|
|
@media screen and (max-width: $screen-desktop-min) {
|
|
max-width: 100%;
|
|
|
|
grid-column: span 1;
|
|
grid-row: span 1;
|
|
}
|
|
|
|
img {
|
|
display: grid;
|
|
|
|
width: 100%;
|
|
height: 100%;
|
|
|
|
overflow: hidden;
|
|
|
|
border-radius: 3px;
|
|
|
|
object-fit: cover;
|
|
|
|
@media screen and (max-width: $screen-desktop-min) {
|
|
max-height: none;
|
|
|
|
width: 25rem;
|
|
max-width: 100%;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|