:root { --height: 300px; --width: 550px; --width-expanded: min(780px, calc(100vw - 40px)); --height-expanded: min(640px, calc(100dvh - 40px)); } @font-face { font-family: "Roboto"; src: local("Roboto"), url("font/roboto.ttf") format("truetype"); font-display: swap; } body { font-family: "Roboto", "Helvetica Neue", "Helvetica", "Arial", sans-serif; background-image: url("../img/background.svg"); background-color: black; background-repeat: no-repeat; background-position: center; background-size: cover; display: flex; justify-content: center; align-items: center; padding: 0; margin: 0; height: 100dvh; width: 100vw; min-height: var(--height); min-width: var(--width); } .footer-container { position: absolute; bottom: calc(12px + env(safe-area-inset-bottom, 0px)); right: 12px; display: flex; align-items: center; gap: 8px; font-size: 0.8em; padding: 5px 14px; border-radius: 999px; color: rgba(255, 255, 255, 0.7); background-color: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.15); backdrop-filter: blur(6px); } .footer-container a { color: inherit; transition: color 0.15s; } .footer-container a:hover { color: white; } .footer-container .separator { opacity: 0.5; } .preload * { transition: none !important; } .card-container { width: var(--width); height: var(--height); perspective: 1000px; transition: width 0.3s cubic-bezier(0.2, 0.9, 0.3, 1), height 0.3s cubic-bezier(0.2, 0.9, 0.3, 1); } .anchor { position: absolute; top: 0; left: 0; } #details:target + .card-container { width: var(--width-expanded); height: var(--height-expanded); } #details:target + .card-container .card { transform: rotateX(180deg); } .card { position: relative; width: 100%; height: 100%; transition: transform 1s; transform-style: preserve-3d; animation: hint-x 0.9s ease-in-out 1.2s; animation-composition: add; } @keyframes hint-x { 35% { transform: rotateX(25deg); } 70% { transform: rotateX(-6deg); } } @keyframes hint-y { 35% { transform: rotateY(25deg); } 70% { transform: rotateY(-6deg); } } #flip:target, .card-container:has(.back :focus-visible) .card { transform: rotateX(180deg); } @media (hover: hover) { .card-container:hover .card { transform: rotateX(180deg); } } .card .front, .card .back { background-image: url("../img/noise.png"); background-repeat: repeat; position: absolute; width: 100%; height: 100%; backface-visibility: hidden; border-radius: 10px; background-color: white; } .card .front { display: flex; flex-direction: row; align-items: center; justify-content: center; } .card .front img { border-radius: 50%; max-height: 200px; } .card .front hr, .card .back hr { height: calc(var(--height) / 2); width: 0px; border-radius: 10px; border: 2px dashed lightgray; margin: 0 10px; } .card .front .name { margin-left: 30px; } .card .front .name h1 { text-align: left; margin: 0 0 10px 0; padding: 0; } .card .front .name ul { padding: 0 0 0 20px; margin: 0; list-style: square; } .card .front .name .slogan { margin: 12px 0 0 0; font-size: 0.85em; font-weight: 300; color: #606060; } .card .back { transform: rotateX(180deg); display: flex; flex-direction: column; overflow: hidden; } .card .back-main { flex-shrink: 0; height: var(--height); overflow: hidden; transition: height 0.3s cubic-bezier(0.2, 0.9, 0.3, 1), opacity 0.15s; display: flex; flex-direction: row; align-items: center; justify-content: center; } .card .details { flex: 1; overflow-y: auto; padding: 0 50px 50px 50px; opacity: 0; visibility: hidden; transition: opacity 0.15s, visibility 0s 0.15s; } #details:target + .card-container .back-main { height: 360px; } #details:target + .card-container .details { opacity: 1; visibility: visible; transition: opacity 0.2s 0.1s, visibility 0s; } .card .details h2 { margin: 0 0 6px 0; font-size: 0.85em; font-weight: 300; color: #606060; } .card .details p { margin: 0; line-height: 1.4em; } .card .details p + p { margin-top: 0.7em; } .card .details-button { position: absolute; z-index: 1; left: 50%; bottom: 0; transform: translateX(-50%); padding: 0 0 15px 0; display: flex; align-items: center; gap: 6px; font-size: 0.85em; color: #808080; } .card .details-button i { font-size: 0.85em; } .card .details-close { visibility: hidden; } #details:target + .card-container .details-open, #details:target + .card-container .flip-button { visibility: hidden; } #details:target + .card-container .details-close { visibility: visible; } .card .details-close-hover { display: none; } @media (hover: hover) { .card .details-close-touch { display: none; } .card .details-close-hover { display: flex; } } .card .back hr { margin: 0 20px; } .card .back ul { list-style: none; text-align: left; padding: 0; margin: 0; } .card .back ul li { margin: 5px 0; } .card .back ul li i { width: 20px; margin-right: 7px; text-align: center; color: #404040; font-size: 0.9em; line-height: 1em; } .card .back .interests { display: grid; grid-template-columns: auto auto; align-items: center; column-gap: 10px; row-gap: 6px; } .card .back .interests .label { text-align: right; font-size: 0.85em; font-weight: 300; color: #606060; } .card .back .interests .icons { display: flex; align-items: center; gap: 0.4em; font-size: 1.25em; color: #404040; } .card .back .interests .skill { display: flex; flex-direction: column; align-items: center; width: 1.25em; } .card .back .interests .skill > i { width: 1.25em; text-align: center; } .card .back .interests .icon { width: 1.25em; height: 1em; fill: currentColor; } .card .back .interests .caption { display: none; margin-top: 4px; font-size: 0.5em; line-height: 1.2em; color: #606060; text-align: center; hyphens: auto; } #details:target + .card-container .interests { row-gap: 14px; } #details:target + .card-container .interests .label { align-self: start; padding-top: 0.1em; } #details:target + .card-container .interests .icons { align-items: flex-start; } #details:target + .card-container .interests .skill { width: 4.8em; } #details:target + .card-container .interests .caption { display: block; } .card .flip-button { position: absolute; right: 0; bottom: 0; padding: 0 25px 15px 0; display: flex; align-items: center; gap: 6px; font-size: 0.85em; color: #808080; } .card .front .flip-button { top: 0; left: 0; justify-content: flex-end; align-items: flex-end; } .card .flip-button i { width: 1.25em; text-align: center; } .cap-visibleWhenCanHover { visibility: visible; } .cap-visibleWhenPinned { visibility: hidden; } .cap-visibleWhenUnPinned { visibility: hidden; } a { font-style: normal; text-decoration: none; color: black; cursor: pointer; } li .spacer { height: 1rem; } .clickable { cursor: pointer; } .requires-js { display: none; } @media (hover: hover) { .cap-visibleWhenCanHover { visibility: hidden; } .cap-visibleWhenPinned { visibility: hidden; } .cap-visibleWhenUnPinned { visibility: visible; } #flip:target .cap-visibleWhenPinned { visibility: visible; } #flip:target .cap-visibleWhenUnPinned { visibility: hidden; } } @media only screen and (max-width: 600px) { :root { --width: min(300px, calc(100vw - 32px)); --height: min(550px, calc(100dvh - 110px)); --width-expanded: min(440px, calc(100vw - 24px)); --height-expanded: calc(100dvh - 110px); } .footer-container { bottom: calc(6px + env(safe-area-inset-bottom, 0px)); right: 6px; gap: 6px; font-size: 0.7em; padding: 3px 10px; } .card .front, .card .back-main { flex-direction: column; } #flip:target, #details:target + .card-container .card, .card-container:has(.back :focus-visible) .card { transform: rotateY(180deg); } .card .back { transform: rotateY(180deg); } .card { animation-name: hint-y; } .card .front img { max-height: min(200px, 30dvh); } .card .front hr, .card .back hr { width: calc(var(--width) / 2); height: 0px; border-radius: 10px; border: 2px dashed lightgray; margin: 0; } .card .front .name { margin-top: 25px; margin-left: 0; text-align: center; } .card .front .name h1 { text-align: center; } .card .front .name ul { padding: 0; list-style: none; } .card .back-main { justify-content: center; gap: 28px; padding-bottom: 30px; box-sizing: border-box; } .card .back hr { margin: 0; } #details:target + .card-container .back { overflow-y: auto; } #details:target + .card-container .details { flex: none; overflow: visible; padding: 20px 25px 5px 25px; } #details:target + .card-container .back-main { flex: none; height: auto; overflow: visible; justify-content: flex-start; padding: 15px 25px 0 25px; } #details:target + .card-container .back-main > ul, #details:target + .card-container .back-main > hr { display: none; } #details:target + .card-container .interests { grid-template-columns: 1fr; row-gap: 4px; width: 100%; } #details:target + .card-container .interests .label { text-align: left; margin-top: 10px; } #details:target + .card-container .interests .icons { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px 4px; } #details:target + .card-container .interests .skill { width: auto; min-width: 0; } #details:target + .card-container .interests .caption { -webkit-hyphens: auto; hyphens: auto; overflow-wrap: break-word; max-width: 100%; } #details:target + .card-container .details-close { position: sticky; order: 1; left: auto; transform: none; flex: none; justify-content: center; margin-top: auto; padding: 18px 0 15px 0; background: linear-gradient(to bottom, rgba(248, 248, 248, 0), rgb(248, 248, 248) 45%); } } @media (hover: hover) and (max-width: 600px) { .card-container:hover .card { transform: rotateY(180deg); } } @media (prefers-reduced-motion: reduce) { .card, .card-container, .card .back-main, .card .details { transition: none; animation: none; } }