homepage/style.css
Dejvino b7707bb8ed fix: drop preload concept and fix CV section visibility
Co-authored-by: aider (openai/qwen3.6) <aider@aider.chat>
2026-05-23 09:00:19 +02:00

999 lines
23 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);
}
}
* { 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: flex-start;
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;
filter: none !important;
margin-right: 16px !important;
}
.hero { grid-column: span 3; }
.hiring-toggle { grid-column: span 3; }
.selected-work { grid-column: span 2; }
.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;
filter: none !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 {
width: 16px;
height: 16px;
flex-shrink: 0;
}
.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;
gap: 10px;
}
.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;
gap: 10px;
padding-top: 12px;
border-top: 1px solid rgba(0, 243, 255, 0.12);
}
.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 narrow side panel, non-interactive
*/
.personal-tags {
display: flex;
flex-direction: column;
gap: 10px;
}
.personal-tag {
font-size: 0.9rem;
color: var(--text-color);
opacity: 0.85;
padding-left: 10px;
border-left: 2px solid rgba(0, 243, 255, 0.15);
}
.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;
filter: brightness(0.8) contrast(1.2) sepia(1) hue-rotate(140deg);
border: 1px solid var(--text-color);
}
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;
filter: none !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;
}