@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__mail { display: grid; align-content: space-between; gap: 1.5rem; min-height: 15rem; padding: clamp(1.5rem, 4vw, 3rem); border: 1px solid var(--line); border-radius: clamp(1.25rem, 3vw, 2rem); background: radial-gradient(70% 90% at 100% 0%, rgb(192 17 215 / 0.3), transparent 60%), radial-gradient(60% 90% at 0% 100%, rgb(47 60 190 / 0.4), transparent 60%), var(--surface); text-decoration: none; & .icon { transition: translate 0.3s var(--ease-out); } &:hover .icon { translate: 4px 0; } } .contact__mail-label { font-family: var(--font-mono); font-size: 0.75rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); } .contact__mail-address { font-family: var(--font-display); font-size: clamp(1.5rem, 0.9rem + 3vw, 3rem); font-weight: 650; letter-spacing: -0.03em; line-height: 1.1; overflow-wrap: anywhere; } .contact__mail-action { display: inline-flex; align-items: center; gap: 0.5rem; font-weight: 500; color: var(--pink-text); } .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); } }