Files
Personal-Website/client/css/pages.css
T

554 lines
10 KiB
CSS

@layer pages {
/* Project detail */
.project-head {
position: relative;
isolation: isolate;
padding-block: calc(var(--header-h) + clamp(2rem, 6vw, 5rem)) clamp(2rem, 4vw, 3rem);
}
.back-link {
display: inline-flex;
align-items: center;
gap: 0.5rem;
min-height: 2.75rem;
margin-bottom: 1.25rem;
color: var(--muted);
font-size: 0.95rem;
text-decoration: none;
transition: color 0.2s;
& .icon {
transition: translate 0.3s var(--ease-out);
}
&:hover {
color: var(--text);
& .icon {
translate: -3px 0;
}
}
}
.project-head__title {
max-width: 20ch;
font-size: var(--step-5);
letter-spacing: -0.045em;
line-height: 0.98;
}
.project-meta {
display: flex;
flex-wrap: wrap;
gap: 1.25rem 3rem;
margin-top: 2rem;
& dt {
margin-bottom: 0.4rem;
font-family: var(--font-mono);
font-size: 0.72rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--faint);
}
}
.project-cover {
margin-bottom: clamp(2.5rem, 5vw, 4rem);
}
.project-cover__img {
width: 100%;
max-height: 80vh;
max-height: 80svh;
border: 1px solid var(--line);
border-radius: var(--radius-l);
object-fit: cover;
view-transition-name: project-cover;
}
.project-body {
display: grid;
gap: 3rem;
@media (min-width: 60em) {
grid-template-columns: minmax(0, 1fr) 18rem;
align-items: start;
}
}
.project-links {
padding: 1.25rem;
border: 1px solid var(--line);
border-radius: var(--radius);
background: var(--surface);
@media (min-width: 60em) {
position: sticky;
top: calc(var(--header-h) + 1.5rem);
}
& ul {
display: grid;
gap: 0.5rem;
margin: 0;
padding: 0;
list-style: none;
}
}
.project-links__title,
.contact__aside-title {
margin-bottom: 1rem;
font-family: var(--font-mono);
font-size: 0.75rem;
font-weight: 500;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--faint);
}
.project-section {
padding-top: clamp(3rem, 6vw, 5rem);
}
.project-section__title {
margin-bottom: 1.5rem;
font-size: var(--step-3);
}
.pager {
display: grid;
gap: 1rem;
padding-top: var(--section);
@media (min-width: 40em) {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
.pager__link {
display: grid;
gap: 0.5rem;
padding: 1.5rem;
border: 1px solid var(--line);
border-radius: var(--radius-l);
text-decoration: none;
transition: border-color 0.2s, background-color 0.2s;
&:hover {
border-color: var(--line-strong);
background: var(--surface);
}
}
.pager__link--older {
text-align: right;
@media (min-width: 40em) {
grid-column: 2;
}
& .pager__label {
justify-content: flex-end;
}
}
.pager__label {
display: flex;
align-items: center;
gap: 0.4rem;
font-family: var(--font-mono);
font-size: 0.75rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--muted);
}
.pager__title {
font-family: var(--font-display);
font-size: var(--step-2);
font-weight: 600;
line-height: 1.15;
}
/* Homelab */
.hardware,
.services,
.skills {
display: grid;
gap: 1rem;
margin: 0;
padding: 0;
list-style: none;
}
.hardware {
grid-template-columns: repeat(auto-fill, minmax(min(100%, 17rem), 1fr));
}
.services,
.skills {
grid-template-columns: repeat(auto-fill, minmax(min(100%, 19rem), 1fr));
}
.machine,
.service-group,
.skill-group {
padding: 1.5rem;
border: 1px solid var(--line);
border-radius: var(--radius-l);
background: linear-gradient(180deg, var(--surface), var(--bg-raised));
}
.machine__role {
font-family: var(--font-mono);
font-size: 0.75rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--pink-text);
}
.machine__name {
margin-top: 0.4rem;
font-size: var(--step-2);
}
.machine__specs {
display: grid;
gap: 0.35rem;
margin: 1rem 0 0;
padding: 0;
list-style: none;
color: var(--muted);
font-size: 0.95rem;
& li {
display: flex;
gap: 0.6rem;
&::before {
content: "";
flex: none;
width: 0.35rem;
height: 0.35rem;
margin-top: 0.6em;
border-radius: 50%;
background: var(--violet-text);
}
}
}
.service-group__title,
.skill-group__title {
margin-bottom: 1rem;
font-family: var(--font-mono);
font-size: 0.78rem;
font-weight: 500;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--muted);
}
.service-group__list {
display: grid;
gap: 0.9rem;
margin: 0;
padding: 0;
list-style: none;
}
.service {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
align-items: baseline;
column-gap: 0.75rem;
}
.service__dot {
width: 0.5rem;
height: 0.5rem;
border-radius: 50%;
background: var(--pink);
box-shadow: 0 0 0 4px rgb(255 118 164 / 0.14);
}
.service__name {
font-weight: 600;
& a {
color: inherit;
text-decoration-color: rgb(255 141 180 / 0.6);
&:hover {
color: var(--pink-text);
}
}
}
.service__text {
grid-column: 2;
font-size: 0.92rem;
color: var(--muted);
}
/* Journey */
.about {
display: grid;
gap: 2rem;
@media (min-width: 60em) {
grid-template-columns: 18rem minmax(0, 1fr);
column-gap: 4rem;
}
}
.about__head {
grid-column: 1 / -1;
margin-bottom: 0;
}
.about__portrait {
width: min(100%, 18rem);
}
.about__img {
width: 100%;
aspect-ratio: 4 / 5;
border: 1px solid var(--line);
border-radius: var(--radius-l);
object-fit: cover;
}
.about__text {
font-size: var(--step-1);
line-height: 1.55;
.about__head + & {
grid-column: 1 / -1;
max-width: 48rem;
}
}
.timeline {
--line-x: 0.45rem;
position: relative;
display: grid;
gap: 1.25rem;
margin: 0;
padding: 0 0 0 2.25rem;
list-style: none;
&::before,
&::after {
content: "";
position: absolute;
top: 0.5rem;
bottom: 0.5rem;
left: var(--line-x);
width: 2px;
border-radius: 2px;
}
&::before {
background: var(--line);
}
&::after {
background: linear-gradient(180deg, var(--pink), var(--violet-text), var(--blue-text));
transform-origin: top;
scale: 1 var(--progress, 1);
}
@media (min-width: 60em) {
--line-x: calc(50% - 1px);
grid-template-columns: repeat(2, minmax(0, 1fr));
column-gap: 5rem;
padding-left: 0;
}
}
.timeline__entry {
position: relative;
@media (min-width: 60em) {
&:nth-child(odd) {
grid-column: 1;
text-align: right;
}
&:nth-child(even) {
grid-column: 2;
margin-top: 3rem;
}
&:nth-child(even) + .timeline__entry {
margin-top: -3rem;
}
}
}
.timeline__dot {
position: absolute;
top: 1.5rem;
left: calc(-2.25rem + 0.45rem + 1px - 0.45rem);
width: 0.9rem;
height: 0.9rem;
border: 2px solid currentColor;
border-radius: 50%;
background: var(--bg);
box-shadow: 0 0 0 4px var(--bg);
@media (min-width: 60em) {
.timeline__entry:nth-child(odd) & {
left: auto;
right: calc(-2.5rem - 0.45rem);
}
.timeline__entry:nth-child(even) & {
left: calc(-2.5rem - 0.45rem);
}
}
}
.timeline__entry--edu { color: var(--blue-text); }
.timeline__entry--work { color: var(--pink-text); }
.timeline__entry--project,
.timeline__entry--other { color: var(--violet-text); }
.timeline__card {
padding: 1.25rem 1.4rem;
border: 1px solid var(--line);
border-radius: var(--radius);
background: var(--surface);
color: var(--text);
}
.timeline__period {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5rem;
font-family: var(--font-mono);
font-size: 0.78rem;
color: var(--muted);
@media (min-width: 60em) {
.timeline__entry:nth-child(odd) & {
justify-content: flex-end;
}
}
}
.timeline__title {
margin-top: 0.4rem;
font-size: var(--step-2);
}
.timeline__place {
margin-top: 0.25rem;
color: var(--muted);
font-size: 0.95rem;
}
.timeline__text {
margin-top: 0.6rem;
color: var(--muted);
}
.skill-group__list {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin: 0;
padding: 0;
list-style: none;
}
.skill {
padding: 0.35rem 0.8rem;
border: 1px solid var(--line);
border-radius: 99px;
background: rgb(243 238 248 / 0.05);
font-size: 0.92rem;
}
/* Contact */
.contact {
display: grid;
gap: clamp(2rem, 5vw, 4rem);
@media (min-width: 60em) {
grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
align-items: start;
}
}
.contact-form {
position: relative;
display: grid;
gap: 1.25rem;
}
.contact-form__footer {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 1rem 1.5rem;
margin-top: 0.5rem;
}
.contact-form__note {
max-width: 42ch;
font-size: 0.85rem;
color: var(--muted);
}
.contact__aside {
padding: 1.5rem;
border: 1px solid var(--line);
border-radius: var(--radius-l);
background: var(--surface);
}
.contact__links {
display: grid;
gap: 0.5rem;
margin: 0;
padding: 0;
list-style: none;
}
/* Errors */
.error-page {
position: relative;
isolation: isolate;
display: grid;
align-items: center;
min-height: 80vh;
min-height: 80svh;
padding-block: calc(var(--header-h) + 3rem) 2rem;
& .btn {
margin-top: 2rem;
}
}
.error-page__code {
font-family: var(--font-display);
font-size: clamp(7rem, 4rem + 18vw, 16rem);
font-weight: 700;
line-height: 0.85;
letter-spacing: -0.06em;
background: var(--fluid);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.error-page__title {
margin-top: 1.25rem;
font-size: var(--step-4);
}
}