homepage/style.css
Dejvino b574e2531c style: drop notable creations and redesign interests as wide tag cloud
Co-authored-by: aider (openai/qwen3.6) <aider@aider.chat>
2026-05-23 20:42:55 +02:00

1033 lines
24 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:root {
--bg-color: #050505;
--text-color: #00f3ff;
--card-bg: #0a0a0f;
--accent-color: #ff00ff;
--link-color: #ffd700;
--mono-font: 'SFMono-Regular', Consolas, Menlo, monospace;
}
@keyframes pulse-trace {
0%, 100% { opacity: 0.3; }
50% { opacity: 1; }
}
@keyframes scan-line {
0% { transform: translateX(-150%) skewX(-45deg); opacity: 0; }
10% { opacity: 0.5; }
20% { transform: translateX(150%) skewX(-45deg); opacity: 0; }
100% { transform: translateX(150%) skewX(-45deg); opacity: 0; }
}
@keyframes grow-reveal {
from {
opacity: 0;
max-height: 0;
transform: scale(0.95);
}
to {
opacity: 1;
max-height: 1000px; /* Reduced to match content better and speed up animation */
transform: scale(1);
}
}
@keyframes shrink-fade-away { /* New animation for shrinking */
from {
opacity: 1;
max-height: 1000px;
transform: scale(1);
}
to {
opacity: 0;
max-height: 0;
transform: scale(0.95);
}
}
@keyframes avatar-color-shift {
/* Cyan phase */
0%, 100% { filter: grayscale(100%) sepia(100%) hue-rotate(230deg) saturate(1.4) brightness(1.0); }
/* Light Blue phase */
45% { filter: grayscale(100%) sepia(100%) hue-rotate(160deg) saturate(1.1) brightness(1.0); }
}
* { box-sizing: border-box; }
body {
margin: 0;
font-family: var(--mono-font);
background-color: var(--bg-color);
background-image: radial-gradient(rgba(0, 243, 255, 0.15) 1px, transparent 1px); /* Grid background */
background-size: 24px 24px;
color: var(--text-color);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
padding: 40px 20px;
flex-direction: column;
overflow-x: hidden;
}
.bento-grid {
display: grid;
max-width: 1000px;
gap: 24px;
grid-template-columns: repeat(3, 1fr);
}
.card {
background: var(--card-bg);
padding: 24px;
border: 0.2rem solid transparent;
overflow: hidden;
filter: drop-shadow(0 0 10px rgba(0, 243, 255, 0.3))
drop-shadow(0 0 30px rgba(0, 243, 255, 0.15));
position: relative;
transition: all 0.3s ease;
backface-visibility: hidden; /* Fixes potential text blur on rotated cards */
clip-path: polygon(
0 15px, 15px 0,
100% 0,
100% calc(100% - 15px), calc(100% - 15px) 100%,
0 100%
);
}
/* Desktop-only effects: Shuffle and Gradient Borders */
@media (min-width: 769px) {
.card {
background: linear-gradient(var(--card-bg), var(--card-bg)) padding-box,
linear-gradient(135deg, rgba(0, 243, 255, 0.4), rgba(255, 0, 255, 0.4)) border-box;
}
.card:hover {
filter: drop-shadow(0 0 15px rgba(0, 243, 255, 0.5))
drop-shadow(0 0 50px rgba(0, 243, 255, 0.3));
background: linear-gradient(var(--card-bg), var(--card-bg)) padding-box,
linear-gradient(135deg, rgba(0, 243, 255, 0.8), rgba(255, 0, 255, 0.8)) border-box;
}
/* Desktop Grid Spans */
.avatar {
display: block !important;
max-width: 80px !important;
max-height: 100px !important;
object-fit: cover !important;
border: 2px solid #ccc !important;
border-radius: 4px !important;
margin-right: 16px !important;
}
.hero { grid-column: span 3; }
.hiring-toggle { grid-column: span 3; }
.selected-work { grid-column: span 2; }
body:not(.cv-mode) .personal { grid-column: span 3; }
.cv-mode .personal { grid-column: span 1; }
.cv-container { grid-column: span 3; }
.experience { grid-column: span 3; }
.skills { grid-column: span 3; }
.education { grid-column: span 3; }
/* Shuffle Logic */
.avatar {
display: block !important;
max-width: 80px !important;
max-height: 100px !important;
object-fit: cover !important;
border: 2px solid #ccc !important;
border-radius: 4px !important;
margin-right: 16px !important;
}
.hero { transform: rotate(0.1deg); }
.selected-work { transform: translate(2px, -2px) rotate(-0.2deg); }
.personal { transform: translate(1px, -1px) rotate(-0.15deg); }
.hiring-toggle { transform: translate(-2px, 3px) rotate(0.2deg); }
.experience { transform: translate(3px, -2px) rotate(-0.2deg); }
.skills { transform: translate(-3px, 4px) rotate(0.6deg); }
.education { transform: translate(2px, 3px) rotate(-0.4deg); }
}
@media (max-width: 768px) {
.card {
border-color: rgba(0, 243, 255, 0.3);
}
.card:hover {
border-color: rgba(0, 243, 255, 0.6);
}
}
.profile { display: flex; align-items: center; gap: 32px; }
.hero {
display: flex;
flex-direction: column;
gap: 16px;
}
.hero-identity {
display: flex;
align-items: center;
gap: 20px;
}
.hero-name {
flex: 1;
}
.hero-name h1 {
margin: 0 0 4px 0;
}
.hero-name .headline {
margin: 0 0 4px 0;
font-size: 1rem;
color: var(--accent-color);
}
.hero-name .location {
margin: 0;
font-size: 0.85rem;
opacity: 0.7;
}
.hero-description {
margin: 0;
}
.hero-description p {
margin: 0;
line-height: 1.5;
}
.card .philosophy {
margin: 1.2em 0 0 0;
padding-top: 1em;
border-top: 1px solid rgba(255,255,255,0.08);
font-style: italic;
opacity: 0.75;
font-size: 0.9rem;
}
.highlight-item h3 {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 8px;
}
.highlight-date {
font-size: 0.85em;
color: rgba(0, 243, 255, 0.5);
font-weight: normal;
white-space: nowrap;
}
/**
* Link pills shared base
*/
.pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 6px 12px 6px 10px;
text-decoration: none;
font-size: 0.82rem;
line-height: 1.3;
border-radius: 6px;
border: 1px solid transparent;
transition: all 0.2s ease;
white-space: nowrap;
}
.pill-icon {
font-size: 1.1em;
line-height: 1;
flex-shrink: 0;
display: inline-flex;
align-items: center;
justify-content: center;
width: 1.2em;
text-align: center;
filter: grayscale(90%) brightness(0.8);
}
.pill-label {
font-weight: 600;
}
.pill-url {
font-size: 0.72rem;
opacity: 0.5;
margin-left: 2px;
}
/**
* Contact pills gold accent
*/
.hero-contacts {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 10px;
width: 100%;
}
.contact-pill {
color: var(--link-color);
background: rgba(255, 215, 0, 0.06);
border-color: rgba(255, 215, 0, 0.2);
}
.contact-pill:hover {
background: rgba(255, 215, 0, 0.12);
border-color: rgba(255, 215, 0, 0.5);
box-shadow: 0 0 12px rgba(255, 215, 0, 0.15);
}
.contact-pill .pill-url {
color: var(--link-color);
}
/**
* Nav pills cyan accent
*/
.hero-nav {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 10px;
padding-top: 12px;
border-top: 1px solid rgba(0, 243, 255, 0.12);
width: 100%;
}
.nav-pill {
color: var(--text-color);
background: rgba(0, 243, 255, 0.04);
border-color: rgba(0, 243, 255, 0.15);
}
.nav-pill:hover {
background: rgba(0, 243, 255, 0.1);
border-color: rgba(0, 243, 255, 0.4);
box-shadow: 0 0 12px rgba(0, 243, 255, 0.15);
}
.nav-pill .pill-url {
color: var(--text-color);
}
/**
* Personal interests tag cloud
*/
.personal-tags {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
}
.personal-tag {
font-size: 0.9rem;
color: var(--text-color);
padding: 6px 14px;
border-radius: 20px;
background: rgba(0, 243, 255, 0.05);
border: 1px solid rgba(0, 243, 255, 0.15);
transition: all 0.2s ease;
}
.personal-tag:hover {
background: rgba(0, 243, 255, 0.15);
border-color: rgba(0, 243, 255, 0.4);
}
/* Varying shades for tag cloud */
.personal-tag:nth-child(3n+1) { opacity: 0.6; }
.personal-tag:nth-child(3n+2) { opacity: 0.8; }
.personal-tag:nth-child(3n) { opacity: 1.0; }
.hiring-toggle {
padding: 12px 24px;
cursor: pointer;
transition: transform 0.2s ease, filter 0.3s ease;
}
.hiring-toggle:hover {
filter: brightness(1.2);
transform: translate(-2px, 3px) rotate(0.2deg) scale(1.01);
background: linear-gradient(var(--card-bg), var(--card-bg)) padding-box,
linear-gradient(135deg, rgba(255, 0, 255, 0.6), rgba(0, 243, 255, 0.6)) border-box;
}
.hidden {
display: none !important;
}
.reveal {
display: block !important;
pointer-events: auto;
animation: grow-reveal 0.3s cubic-bezier(0.16, 1, 0.3, 1) both;
transition: none !important;
will-change: opacity, max-height, transform;
backface-visibility: hidden;
}
.fade-out {
display: block !important;
/* This class will be applied when content is being hidden */
animation: shrink-fade-away 0.3s cubic-bezier(0.16, 1, 0.3, 1) both;
transition: none !important;
will-change: opacity, max-height, transform;
backface-visibility: hidden;
}
/* CV Specific Content Styles */
.cv-section {
background: rgba(0, 243, 255, 0.03);
border: 1px solid rgba(0, 243, 255, 0.15);
padding: 20px;
margin-top: 15px;
clip-path: polygon(
0 10px, 10px 0,
100% 0,
100% calc(100% - 10px), calc(100% - 10px) 100%,
0 100%
);
transition: all 0.3s ease;
}
.cv-section:hover {
background: rgba(0, 243, 255, 0.07);
border-color: rgba(0, 243, 255, 0.3);
}
.cv-item {
margin-bottom: 20px;
border-left: 2px solid rgba(0, 243, 255, 0.2);
padding-left: 15px;
}
.cv-item:last-child { margin-bottom: 0; }
.cv-item-header, .cv-header {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-bottom: 4px;
}
address.mono-addr {
font-style: normal;
margin-bottom: 15px;
padding-top: 5px;
}
address.mono-addr span {
display: block;
}
.cv-title {
margin: 0;
font-weight: bold;
color: #fff;
font-size: 1rem;
}
.cv-date {
font-size: 0.7rem;
color: var(--accent-color);
}
.cv-org {
margin: 0 0 8px 0;
font-size: 0.8rem;
color: var(--link-color);
}
.cv-desc {
margin: 0;
font-size: 0.85rem;
line-height: 1.4;
opacity: 0.9;
}
.cv-modified {
text-align: right;
font-size: 0.7rem;
opacity: 0.5;
margin-top: 0px;
margin-bottom: 1rem;
font-family: var(--mono-font);
}
.skill-categories {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
padding: 1rem 0;
}
.skill-group h3 {
font-size: 0.6rem;
text-transform: uppercase;
opacity: 0.4;
letter-spacing: 3px;
margin-bottom: 0.75rem;
text-align: center;
color: var(--text-color);
}
.skill-tags {
display: flex;
flex-wrap: wrap;
gap: 0.5rem 1.5rem;
justify-content: flex-start;
align-items: center;
}
.tag {
display: inline-block;
opacity: 0;
transform: translateX(-5px);
transition: opacity 0.4s ease, transform 0.4s ease;
}
.reveal .tag {
opacity: 1;
transform: translateX(0);
}
.profile::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 60px;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(0, 243, 255, 0.2), transparent);
animation: scan-line 4s infinite linear;
pointer-events: none;
}
.link-grid {
list-style: none; padding: 0; display: grid; gap: 10px;
}
.link-grid a {
font-size: 0.75rem;
display: block;
padding: 8px;
border-left: 3px solid var(--text-color);
color: var(--link-color);
background: rgba(0, 243, 255, 0.15); /* Increased alpha for better visibility */
text-align: center;
transition: all 0.2s ease;
border: 1px solid rgba(0, 243, 255, 0.3);
border-left: 3px solid var(--text-color);
text-shadow: 0 0 5px rgba(255, 215, 0, 0.3);
}
.link-grid a:hover {
background: rgba(0, 243, 255, 0.25);
border-left-color: var(--accent-color);
box-shadow: 0 0 15px var(--accent-color);
transform: translateY(-2px);
}
/* Specific styling for the small contact buttons */
.contact .link-grid {
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
margin-top: 15px;
}
.links::after {
content: "";
position: absolute;
top: 10px; right: 10px;
width: 10px; height: 10px;
background: var(--link-color);
box-shadow: 0 0 15px 2px var(--link-color);
border-radius: 50%;
animation: pulse-trace 1s infinite;
}
/* Cyberpunk Toggle Switch */
.cv-toggle-container {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
font-size: 0.85rem;
color: var(--accent-color);
text-shadow: 0 0 10px var(--accent-color);
text-transform: uppercase;
letter-spacing: 4px;
font-weight: bold;
}
.cv-mode .cv-toggle-container span {
color: #fff;
}
.switch {
position: relative;
display: inline-block;
width: 40px;
height: 20px;
}
.switch input { opacity: 0; width: 0; height: 0; }
.slider {
position: absolute;
cursor: pointer;
top: 0; left: 0; right: 0; bottom: 0;
background-color: rgba(255, 0, 255, 0.2);
transition: .4s;
border: 1px solid var(--accent-color);
}
.slider:before {
position: absolute;
content: "";
height: 12px; width: 12px;
left: 4px; bottom: 3px;
background-color: var(--accent-color);
transition: .4s;
box-shadow: 0 0 10px var(--accent-color);
}
input:checked + .slider { background-color: rgba(0, 243, 255, 0.2); border-color: var(--text-color); }
input:checked + .slider:before {
transform: translateX(20px);
background-color: var(--text-color);
box-shadow: 0 0 10px var(--text-color);
}
.avatar {
width: 120px;
height: 160px; /* Explicit height for aspect ratio 3:4 */
object-fit: cover;
border: 1px solid var(--text-color);
animation: avatar-color-shift 20s infinite linear;
}
body.cv-mode .avatar {
animation: none;
filter: none;
}
h1 {
margin: 0;
font-size: clamp(1.5rem, 5vw, 2.2rem);
color: #fff;
text-shadow: 1px 1px var(--accent-color), -1px -1px var(--text-color), 0 0 15px rgba(255, 255, 255, 0.3);
letter-spacing: 1px;
}
h2 {
font-size: 0.75rem;
text-transform: uppercase;
color: var(--accent-color);
text-shadow: 0 0 8px var(--accent-color);
margin-bottom: 16px;
margin-top: 0;
letter-spacing: 2px;
}
a { color: var(--link-color); text-decoration: none; }
@media (max-width: 768px) {
.bento-grid { grid-template-columns: 1fr; }
.profile, .about, .interests, .links, .contact,
.experience, .skills, .education {
grid-column: span 1;
}
.avatar {
display: block !important;
max-width: 80px !important;
max-height: 100px !important;
object-fit: cover !important;
border: 2px solid #ccc !important;
border-radius: 4px !important;
margin-right: 16px !important;
}
.profile { flex-direction: column; text-align: center; }
.hero { flex-direction: column; text-align: center; }
.hero-identity { flex-direction: column; text-align: center; }
.hero-contacts, .hero-nav { justify-content: center; }
.pill { white-space: normal; gap: 4px 6px; padding: 5px 10px; }
.pill-url { display: inline; }
}
/* Print mode */
/* Condensed Print Mode - White Background */
@media print {
/* Ensure hidden elements stay hidden in print */
.hidden { display: none !important; }
.cv-mode .hidden { display: none !important; }
/* Hide CV content unless CV mode is active */
.cv-container, .cv-section {
display: none !important;
}
.cv-mode .cv-container, .cv-mode .cv-section {
display: block !important;
}
/* Hide navigation card in print */
.card.links { display: none !important; }
* {
box-sizing: border-box;
background: transparent !important;
box-shadow: none !important;
filter: none !important;
transition: none !important;
color: #000 !important;
}
body {
background: #fff !important;
color: #000 !important;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif !important;
margin: 0 !important;
padding: 0 !important;
min-height: 0 !important;
overflow: visible !important;
display: block !important;
}
.bento-grid {
display: block !important;
max-width: 100% !important;
gap: 8px !important;
padding: 0 !important;
margin: 0 !important;
}
.card {
background: #fff !important;
border: 1px solid #ccc !important;
border-radius: 4px !important;
padding: 12px !important;
margin: 8px 0 !important;
clip-path: none !important;
overflow: visible !important;
filter: none !important;
}
/* Hide interactive elements */
.cv-toggle-container, .hiring-toggle, .switch,
.link-grid, .links::after, .profile::before,
.hiring-cta, .hiring-btn, .cv-section::after {
display: none !important;
}
/* Reenable and layout the contact link grid horizontally */
.link-grid {
display: flex !important;
flex-wrap: wrap;
gap: 8px;
width: 100% !important;
}
.contact .link-grid a {
flex: 1 1 0 !important;
min-width: 80px;
text-align: center;
}
/* Make mono-addr display horizontally in print */
address.mono-addr {
display: flex !important;
flex-wrap: wrap;
gap: 4px;
}
address.mono-addr span {
display: inline-block !important;
margin-right: 8px;
}
/* Make contact links span more horizontally in print */
.contact {
/* Span more columns in the grid for a wider layout */
grid-column: span 3 !important;
}
/* Removed duplicate flex layout for .contact .link-grid */
/* Pill links in print show label + URL clearly */
.hero-contacts, .hero-nav {
display: flex !important;
flex-wrap: wrap !important;
gap: 6px !important;
}
.pill {
display: inline-flex !important;
align-items: center !important;
gap: 4px !important;
padding: 3px 8px !important;
border: 1px solid #bbb !important;
border-radius: 3px !important;
background: #f7f7f7 !important;
color: #000 !important;
text-decoration: none !important;
font-size: 0.75rem !important;
}
.pill .pill-icon {
display: none !important;
}
.pill .pill-url {
opacity: 1 !important;
color: #333 !important;
font-size: 0.7rem !important;
}
/* CV Container hidden unless CV mode */
/* Reset animations */
.reveal, .fade-out, .tag, img {
animation: none !important;
transition: none !important;
filter: grayscale(100%) !important;
opacity: 1 !important;
}
/* Show content */
.experience, .skills, .education {
display: block !important;
opacity: 1 !important;
max-height: none !important;
overflow: visible !important;
pointer-events: auto !important;
margin: 4px 0 !important;
}
/* Profile layout */
.avatar {
display: block !important;
max-width: 80px !important;
max-height: 100px !important;
object-fit: cover !important;
border: 2px solid #ccc !important;
border-radius: 4px !important;
filter: none !important;
margin-right: 16px !important;
}
.profile {
display: flex !important;
align-items: center !important;
gap: 16px !important;
padding: 8px !important;
flex-wrap: wrap !important;
}
/* Hero layout keep photo left, name right (like desktop) */
.hero {
display: flex !important;
flex-direction: column !important;
gap: 12px !important;
}
.hero-identity {
display: flex !important;
flex-direction: row !important;
align-items: center !important;
gap: 16px !important;
}
/* Selected Work highlights give titles and items room */
.highlight-item {
margin: 12px 0 !important;
padding: 8px 0 !important;
border-bottom: 1px solid #eee !important;
}
.highlight-item:last-child {
border-bottom: none !important;
}
.highlight-item h3 {
font-size: 13px !important;
margin: 0 0 4px 0 !important;
}
.highlight-subtitle {
font-size: 0.85em !important;
margin: 0 0 6px 0 !important;
font-style: italic !important;
}
.highlight-description {
font-size: 0.9em !important;
margin: 0 !important;
line-height: 1.5 !important;
}
/* Links grid */
.link-grid a {
color: #000 !important;
background: #f5f5f5 !important;
padding: 6px 10px !important;
border: none !important;
display: inline-block !important;
margin: 2px !important;
font-size: 0.85em !important;
}
/* Typography */
h1 {
font-size: 18px !important;
margin: 4px 0 8px 0 !important;
padding-bottom: 4px !important;
border-bottom: 1px solid #000 !important;
color: #000 !important;
}
h2 {
font-size: 11px !important;
text-transform: uppercase !important;
color: #000 !important;
margin: 8px 0 4px 0 !important;
padding: 4px !important;
border-bottom: 1px solid #eee !important;
font-weight: bold !important;
}
h3, h4, h5, h6 {
font-size: 10px !important;
margin: 4px 0 !important;
color: #000 !important;
font-weight: bold !important;
}
a {
color: #000 !important;
text-decoration: underline !important;
}
/* Remove neon effects */
.tag {
opacity: 1 !important;
background: #f5f5f5 !important;
border: 1px solid #ccc !important;
padding: 2px 6px !important;
font-size: 0.8em !important;
}
/* Condensed spacing */
.card h1 { margin: 0 0 4px 0 !important; }
.card h2 { margin: 4px 0 8px 0 !important; }
.card p { margin: 4px 0 !important; font-size: 0.9em !important; }
.card li { margin: 2px 0 !important; font-size: 0.9em !important; }
/* Remove gradients and shadows */
.profile .links { display: none !important; }
/* Ensure images don't take too much space */
img {
max-width: 60px !important;
max-height: 80px !important;
object-fit: contain !important;
filter: grayscale(100%) !important;
}
/* Better column layout for print */
@page {
margin: 1cm;
}
/* Reduce page breaks */
.card { page-break-inside: avoid !important; }
/* Ensure hidden elements stay hidden in print */
.hidden { display: none !important; }
.cv-mode .hidden { display: none !important; }
/* Render interests as horizontal pills in print */
.personal-tags {
flex-direction: row !important;
flex-wrap: wrap !important;
gap: 4px !important;
}
.personal-tag {
display: inline-flex !important;
align-items: center !important;
padding: 2px 8px !important;
border: 1px solid #ccc !important;
border-radius: 3px !important;
background: #f7f7f7 !important;
}
.page-footer {
font-size: 0.7rem !important;
color: #888 !important;
margin: 16px 0 0 !important;
opacity: 0.5 !important;
}
}
.page-footer {
text-align: center;
font-size: 0.75rem;
color: #666;
margin: 24px 0 0;
padding: 0;
opacity: 0.6;
}