@font-face { font-family: 'Monocraft'; src: url('/Monocraft.ttf') format('truetype'); font-weight: normal; font-style: normal; } @font-face { font-family: 'Monocraft'; src: url('/Monocraft-Bold.ttf') format('truetype'); font-weight: bold; font-style: normal; } @font-face { font-family: 'Monocraft'; src: url('/Monocraft-Italic.ttf') format('truetype'); font-weight: normal; font-style: italic; } :root { /* Gruvbox Dark Theme */ --bg: #1d2021; --bg-soft: #282828; --bg-hard: #32302f; --fg: #ebdbb2; --gray: #a89984; --prettypurple: #733999; --accent: #fabd2f; /* Gruvbox Yellow */ --accent2: #fe8019; /* Gruvbox Orange */ --accent3: #d79921; /* Gruvbox Dark Yellow */ --green: #b8bb26; /* Gruvbox Green */ --aqua: #8ec07c; /* Gruvbox Aqua */ --blue: #83a598; /* Gruvbox Blue */ --purple: #d3869b; /* Gruvbox Purple */ --red: #fb4934; /* Gruvbox Red */ --darkpink: #ff0043; /* Custom Dark Pink */ --font-custom-mono: 'Monocraft', 'JetBrains Mono', 'Fira Code', 'Source Code Pro', 'Courier New', monospace; --card-bg: rgba(40, 40, 40, 0.65); --card-border: rgba(168, 153, 132, 0.35); --tui-border: var(--gray); --tui-border-highlight: var(--accent); --radius: 0px; } /* RESET */ * { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; } body { min-height: 100vh; background: var(--bg); color: var(--fg); font-family: var(--font-custom-mono); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow-x: hidden; font-size: 14px; line-height: 1.5; } /* Container */ .container { width: 100%; max-width: 1080px; margin: 0 auto; padding: 0 16px; position: relative; z-index: 1; } /* ============================================ HEADER - TUI top bar ============================================ */ .header { position: sticky; top: 0; left: 0; width: 100%; z-index: 1000; border-bottom: 1px solid var(--tui-border-highlight); background-color: rgba(29, 32, 33, 0.4) !important; backdrop-filter: blur(20px) saturate(150%) !important; -webkit-backdrop-filter: blur(20px) saturate(150%) !important; padding: 0; } .header-center { max-width: 1100px; margin: 0 auto; display: flex; align-items: center; padding: 8px 16px; gap: 10px; } .logo { height: 28px; width: 28px; border-radius: 4px; object-fit: cover; border: 1px solid var(--accent); opacity: 0.9; transition: opacity 0.15s ease; } .logo:hover { opacity: 1; box-shadow: 0 0 8px rgba(250, 189, 47, 0.4); } .site-name { font-weight: 700; font-size: 1rem; font-family: var(--font-custom-mono), 'JetBrains Mono', monospace; color: var(--accent); letter-spacing: 0.02em; } /* ============================================ HERO - TUI welcome panel ============================================ */ .hero { text-align: left; padding: 0; position: relative; z-index: 2; margin-top: 20px; } .hero-panel { border: 1px solid var(--panel-color, var(--accent)); background: rgba(29, 32, 33, 0.75); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); padding: 20px 24px; position: relative; } .hero-panel-label { position: absolute; top: -1px; left: 16px; transform: translateY(-50%); background: var(--bg); color: var(--panel-color, white); padding: 2px 6px; border-radius: 0; border: 1px solid var(--panel-color, white); font-size: 0.8rem; font-weight: bold; letter-spacing: 0.05em; text-transform: uppercase; } .hero-title { font-size: 1.6rem; font-weight: 800; color: var(--accent); margin-bottom: 8px; letter-spacing: -0.01em; } .hero-subtitle { font-size: 0.9rem; color: var(--gray); line-height: 1.6; max-width: none; margin: 0; } .text-green { color: var(--green); } .text-blue { color: var(--blue); } .mail-contact { text-align: center; margin-bottom: 18px; color: var(--fg); font-size: 0.9rem; } .mail-contact a { color: var(--blue); text-decoration: none; } .about-section { margin-top: 20px; } .about-content { padding: 20px 24px; color: var(--fg); font-family: var(--font-custom-mono); font-size: 0.9rem; line-height: 1.6; } .label-blue { color: var(--blue); } .label-yellow { color: var(--accent); } .label-green { color: var(--green); } .cursor-blink { display: inline-block; width: 8px; height: 1.1em; background: var(--accent); margin-left: 4px; vertical-align: text-bottom; animation: cursorBlink 1s step-end infinite; } @keyframes cursorBlink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } } /* ============================================ SOCIAL BUTTONS - TUI list style ============================================ */ .social-section { margin-top: 20px; } .tui-panel { border: 1px solid var(--panel-color, var(--tui-border)); background: rgba(29, 32, 33, 0.75); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); position: relative; } .tui-panel-label { position: absolute; top: -1px; left: 16px; transform: translateY(-50%); background: var(--bg); color: var(--panel-color, white); padding: 2px 6px; border-radius: 0; border: 1px solid var(--panel-color, white); font-size: 0.8rem; font-weight: bold; letter-spacing: 0.05em; text-transform: uppercase; } .social-buttons { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 0; padding: 12px 0; } .social-button { display: flex; align-items: center; gap: 10px; padding: 6px 20px; background: transparent; border: none; color: var(--fg); text-decoration: none; font-weight: 500; font-size: 0.85rem; font-family: var(--font-custom-mono), 'JetBrains Mono', monospace; transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); position: relative; border-bottom: 2px solid transparent; border-radius: 0; overflow: hidden; z-index: 1; } .social-button::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(250, 189, 47, 0.2), transparent); transition: left 0.5s ease; z-index: -1; } .social-button:hover::before { left: 100%; } .social-button:hover { background: rgba(250, 189, 47, 0.08); color: var(--accent); } .social-icon { width: 16px; height: 16px; opacity: 0.7; transition: opacity 0.15s ease; } .social-button:hover .social-icon { opacity: 1; filter: drop-shadow(0 0 4px rgba(250, 189, 47, 0.4)); } .social-label { transition: color 0.15s ease; } /* ============================================ SERVICES SECTION - TUI grid ============================================ */ .services-section { margin-top: 20px; padding-top: 0; } .services-title { display: none; } .services-buttons { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0; padding: 12px 0; } .service-button { display: flex; align-items: center; gap: 12px; padding: 10px 20px; background: transparent; border: none; border-radius: 0; text-decoration: none; color: var(--fg); font-family: var(--font-custom-mono), 'JetBrains Mono', monospace; min-width: 0; position: relative; overflow: hidden; z-index: 1; transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); } .service-button::before { content: ''; position: absolute; top: -100%; left: 0; width: 100%; height: 100%; background: linear-gradient(180deg, transparent, rgba(250, 189, 47, 0.15), transparent); transition: top 0.4s ease; z-index: -1; } .service-button:hover::before { top: 100%; } .service-button:last-child { border-bottom: none; } .service-button:hover { background: rgba(250, 189, 47, 0.08); transform: translateY(-3px); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); } .service-icon { font-size: 1.25rem; transition: transform 0.15s ease; width: 28px; text-align: center; filter: none; } .service-button:hover .service-icon { transform: scale(1.1); } .service-button.friend .service-icon { display: grid; place-items: center; width: 56px; height: 56px; border-radius: 50%; overflow: hidden; flex-shrink: 0; } .friend-icon { display: block; width: 56px; height: 56px; border-radius: 50%; object-fit: cover; } .service-text { display: flex; flex-direction: column; align-items: flex-start; gap: 1px; } .service-name { font-size: 0.9rem; font-weight: 700; color: var(--fg); transition: color 0.15s ease; } .service-button.proxmox:hover .service-name { color: var(--blue); } .service-button.ai:hover .service-name { color: var(--green); } .service-button.jellyfin:hover .service-name { color: var(--purple); } .service-button.pterodactyl:hover .service-name { color: var(--red); } .service-button.funkwhale:hover .service-name { color: var(--darkpink); } .service-button.mailcow:hover .service-name { color: var(--accent); } .service-button.searxng:hover .service-name { color: var(--aqua); } .service-button.convertx:hover .service-name { color: var(--gray); } .service-button.gitdxd:hover .service-name { color: var(--purple); } .service-button.proxmox { border-color: rgba(168, 153, 132, 0.1); } .service-button.ai { border-color: rgba(168, 153, 132, 0.1); } .service-button.jellyfin { border-color: rgba(168, 153, 132, 0.1); } .service-button.pterodactyl { border-color: rgba(168, 153, 132, 0.1); } .service-button.funkwhale { border-color: rgba(255, 0, 67, 0.1); } .service-button.mailcow { border-color: rgba(168, 153, 132, 0.1); } .service-button.searxng { border-color: rgba(168, 153, 132, 0.1); } .service-button.convertx { border-color: rgba(168, 153, 132, 0.1); } .service-button.gitdxd { border-color: rgba(255, 0, 67, 0.1); } .service-desc { font-size: 0.75rem; color: var(--gray); transition: color 0.15s ease; font-family: var(--font-custom-mono), 'JetBrains Mono', monospace; } .service-button:hover .service-desc { color: var(--fg); } /* ============================================ PROJECTS - TUI sections ============================================ */ .projects { margin-top: 20px; padding: 0; text-align: left; position: relative; z-index: 2; } .section-title { display: none; } .subsection-title { display: none; } .subsection-wrapper { margin-top: 20px; } .subsection-panel { border: 1px solid var(--panel-color, var(--tui-border)); background: rgba(29, 32, 33, 0.75); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); position: relative; padding: 20px 16px 16px; } .subsection-panel-label { position: absolute; top: -1px; left: 16px; transform: translateY(-50%); background: var(--bg); color: var(--panel-color, white); padding: 2px 6px; border-radius: 0; border: 1px solid var(--panel-color, white); font-size: 0.8rem; font-weight: bold; letter-spacing: 0.05em; text-transform: uppercase; } .subsection-panel.coding-panel .subsection-panel-label { color: var(--purple); } .subsection-panel.friends-panel { background: rgba(255, 255, 255, 0.08); /* slightly light */ backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); } .subsection-panel.friends-panel .subsection-panel-label { color: var(--aqua); } /* Project grid & cards */ .project-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(310px, 1fr)); gap: 12px; max-width: none; margin: 0; padding: 0; } .friends-grid { grid-template-columns: repeat(auto-fill, minmax(45%, 1fr)); } .video-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; max-width: none; margin: 0; padding: 0; } .project-card { background: rgba(50, 48, 47, 0.35); border: 1px solid rgba(168, 153, 132, 0.18); border-radius: 0; padding: 12px; width: 100%; text-decoration: none; color: inherit; transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); position: relative; overflow: hidden; box-shadow: none; backdrop-filter: none; transform: translateZ(0); will-change: transform; } .project-card::after { content: ''; position: absolute; top: 0; left: -150%; width: 50%; height: 100%; background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.06) 50%, rgba(255,255,255,0) 100%); transform: skewX(-25deg); transition: all 0.6s ease; z-index: 2; pointer-events: none; } .project-card:hover::after { left: 167%; } .project-card:hover { border-color: var(--accent); background: rgba(50, 48, 47, 0.6); transform: translateY(-6px) scale(1.01); } .project-image { height: 160px; width: 100%; background-size: cover; background-position: center; background-repeat: no-repeat; border-radius: 0; margin-bottom: 10px; border: 1px solid rgba(168, 153, 132, 0.15); transition: all 0.2s ease; box-shadow: none; } .project-card:hover .project-image { border-color: rgba(250, 189, 47, 0.3); transform: none; } .project-title { font-size: 0.95rem; font-weight: 700; color: var(--fg); margin-bottom: 4px; font-family: var(--font-custom-mono), 'JetBrains Mono', monospace; transition: color 0.15s ease; } .project-card:hover .project-title { color: var(--accent); text-shadow: none; } .project-desc { color: var(--gray); font-size: 0.8rem; line-height: 1.5; margin-top: 4px; font-family: var(--font-custom-mono), 'JetBrains Mono', monospace; } .project-card:hover .project-desc { color: var(--fg); } /* Friends section styles */ .friend-card-wrapper { display: flex; flex-direction: column; } .friend-header { display: flex; align-items: center; background-color: #3c3836; padding: 4px 8px; border-top-left-radius: 3px; border-top-right-radius: 3px; } .window-icon { width: 16px; height: 16px; margin-right: 8px; } .friend-iframe-container { flex-grow: 1; overflow: hidden; border: 1px solid var(--card-border); border-top: none; aspect-ratio: 16 / 9; transform: translateZ(0); will-change: transform; } .friend-iframe { width: 100%; height: 100%; border: none; } /* ============================================ FOOTER - TUI status bar ============================================ */ .footer { margin-top: 20px; margin-bottom: 24px; padding: 10px 20px; text-align: center; color: var(--gray); border: 1px solid var(--tui-border); font-size: 0.8rem; font-family: var(--font-custom-mono), 'JetBrains Mono', monospace; position: relative; z-index: 2; background: rgba(29, 32, 33, 0.75); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); box-shadow: none; } .footer-label { position: absolute; top: -1px; right: 16px; transform: translateY(-50%); background: var(--bg); color: white; padding: 2px 6px; border-radius: 0; border: 1px solid var(--tui-border); font-size: 0.7rem; font-weight: bold; letter-spacing: 0.05em; text-transform: uppercase; } /* ============================================ ANIMATIONS ============================================ */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .hero { animation: fadeIn 0.5s ease both; } .social-section { animation: fadeIn 0.5s ease 0.1s both; } .services-section { animation: fadeIn 0.5s ease 0.2s both; } .projects { animation: fadeIn 0.5s ease 0.3s both; } .footer { animation: fadeIn 0.5s ease 0.4s both; } .project-card { opacity: 0; animation: fadeIn 0.3s ease forwards; } .project-grid .project-card:nth-child(1) { animation-delay: 0.05s; } .project-grid .project-card:nth-child(2) { animation-delay: 0.1s; } .project-grid .project-card:nth-child(3) { animation-delay: 0.15s; } .project-grid .project-card:nth-child(4) { animation-delay: 0.2s; } .project-grid .project-card:nth-child(5) { animation-delay: 0.25s; } .project-grid .project-card:nth-child(6) { animation-delay: 0.3s; } .project-grid .project-card:nth-child(7) { animation-delay: 0.35s; } .project-grid .project-card:nth-child(8) { animation-delay: 0.4s; } .project-grid .project-card:nth-child(9) { animation-delay: 0.45s; } .project-grid .project-card:nth-child(10) { animation-delay: 0.5s; } .project-grid .project-card:nth-child(11) { animation-delay: 0.55s; } .project-grid .project-card:nth-child(12) { animation-delay: 0.6s; } .project-grid .project-card:nth-child(13) { animation-delay: 0.65s; } .project-grid .project-card:nth-child(14) { animation-delay: 0.7s; } /* Custom scrollbar - thin TUI style */ ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: var(--bg); } ::-webkit-scrollbar-thumb { background: var(--gray); border: 2px solid var(--bg); } ::-webkit-scrollbar-thumb:hover { background: var(--accent); } /* Selection styling */ ::selection { background: rgba(250, 189, 47, 0.35); color: var(--fg); } /* ============================================ RESPONSIVE ============================================ */ @media (max-width: 768px) { .container { padding: 0 8px; } .hero-panel { padding: 16px 20px; } .hero-title { font-size: 1.4rem; } .project-grid { grid-template-columns: 1fr; gap: 10px; } .social-buttons { grid-template-columns: 1fr 1fr; } .services-buttons { grid-template-columns: 1fr; } .friends-buttons { grid-template-columns: 1fr; } .friends-grid { grid-template-columns: 1fr; } .video-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; } .friend-iframe-container { aspect-ratio: 16 / 9; } .gym-grid { gap: 12px; padding: 16px; } .gym-item { padding: 12px; gap: 8px; } .gym-weight { font-size: 1.4rem; } } @media (max-width: 520px) { .container { padding: 0 4px; } .hero-title { font-size: 1.2rem; } .social-buttons { grid-template-columns: 1fr; } .gym-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px; padding: 12px 4px; } .gym-item { padding: 8px 2px; gap: 4px; min-width: 0; } .gym-icon { max-width: 32px !important; } .gym-label { font-size: 0.55rem; letter-spacing: 0.02em; } .gym-weight { font-size: 0.95rem; } .project-grid { grid-template-columns: 1fr; } .video-grid { grid-template-columns: 1fr; gap: 10px; } .project-image { height: 130px; } .subsection-panel { padding: 12px 8px; } } /* Reduced motion for accessibility */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } /* ============================================ SEARCH BAR ============================================ */ .search-section { margin-top: 20px; } .search-form { display: flex; padding: 20px 24px; } .search-bar { width: 100%; padding: 12px 16px; background: rgba(255, 255, 255, 0.05); /* very transparent */ backdrop-filter: blur(10px) saturate(120%); -webkit-backdrop-filter: blur(10px) saturate(120%); border: 1px solid var(--tui-border); color: var(--fg); font-family: var(--font-custom-mono), monospace; font-size: 1rem; outline: none; transition: all 0.3s ease; } .search-bar:focus { border-color: var(--red); box-shadow: 0 0 10px rgba(74, 233, 52, 0.3); } .search-bar::placeholder { color: var(--gray); } /* Joker Animation */ .joker-flash-overlay { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: 99999; pointer-events: none; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.1); } .joker-img { max-width: 90vw; max-height: 90vh; animation: jokerFlash 1.2s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; filter: drop-shadow(0 0 50px rgba(255, 0, 67, 0.8)); } @keyframes jokerFlash { 0% { opacity: 0; transform: scale(0.1); } 15% { opacity: 1; transform: scale(2.5) rotate(-5deg); } 60% { opacity: 1; transform: scale(1.5) rotate(5deg); } 100% { opacity: 0; transform: scale(0) rotate(-20deg); } } /* ============================================ GYM PANEL ============================================ */ .gym-section { margin-top: 20px; } .gym-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; padding: 24px; text-align: center; } .gym-item { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 16px; background: rgba(255, 255, 255, 0.02); border: 1px solid rgba(168, 153, 132, 0.1); transition: all 0.3s ease; } .gym-item:hover { background: rgba(250, 189, 47, 0.05); border-color: rgba(250, 189, 47, 0.3); transform: translateY(-4px); } .gym-icon { opacity: 0.9; transition: opacity 0.3s ease, filter 0.3s ease; width: 100%; max-width: 48px; height: auto; } .gym-item:hover .gym-icon { opacity: 1; filter: drop-shadow(0 0 8px rgba(250, 189, 47, 0.8)); } .gym-label { font-size: 0.85rem; font-weight: 700; color: var(--gray); letter-spacing: 0.08em; text-transform: uppercase; } .gym-weight { font-size: 1.6rem; font-weight: 800; color: var(--fg); font-family: var(--font-custom-mono), monospace; } /* ============================================ HEATMAP ============================================ */ .contribution-heatmap { display: flex; flex-direction: column; gap: 10px; width: 100%; min-width: 0; overflow: hidden; } .contribution-command-row { display: flex; justify-content: space-between; align-items: center; min-width: 0; } .contribution-command { min-width: 0; color: var(--fg); font-size: 0.85rem; overflow-wrap: anywhere; } .contribution-total-title { color: var(--fg); font-size: 1.67rem; font-weight: 700; line-height: 1.15; margin: 10px 0 12px; text-align: center; overflow-wrap: anywhere; } .contribution-log { min-width: 0; } .contribution-log-command { margin-bottom: 4px; } .contribution-entry { display: flex; flex-direction: column; min-width: 0; color: var(--fg); font-size: 0.8rem; } .contribution-entry-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; min-width: 0; color: var(--gray); } .contribution-repo { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .contribution-date { flex-shrink: 0; max-width: 48%; color: var(--green); font-size: 0.67rem; line-height: 1.25; text-align: right; overflow-wrap: anywhere; } .contribution-message { min-width: 0; color: var(--color-white); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .heatmap-container { display: flex; width: 100%; overflow-x: auto; gap: 2px; padding: 4px; border: 1px solid var(--aqua); scrollbar-width: none; scrollbar-color: var(--green) transparent; } .heatmap-status-row { display: flex; justify-content: space-between; align-items: center; gap: 10px; min-width: 0; margin-top: 4px; color: var(--gray); font-size: 0.75rem; } .heatmap-status-text { min-width: 0; overflow-wrap: anywhere; } .heatmap-legend { display: flex; flex-shrink: 0; align-items: center; gap: 4px; } .heatmap-week { display: flex; flex-direction: column; flex: 1; gap: 2px; } .heatmap-cell { width: 100%; aspect-ratio: 1; border-radius: 2px; background-color: var(--bg-hard); transition: transform 0.1s ease; } .heatmap-cell:hover { transform: scale(1.2); z-index: 10; box-shadow: 0 0 6px var(--color-white); } .heatmap-cell[data-level="1"] { background-color: rgba(130,180,19, 0.4); } .heatmap-cell[data-level="2"] { background-color: rgba(130,180,19, 0.6); } .heatmap-cell[data-level="3"] { background-color: rgba(130,180,19, 0.8); } .heatmap-cell[data-level="4"] { background-color: rgba(130,180,19, 1); } .heatmap-legend-cell { width: 11px; height: 11px; border-radius: 2px; background-color: var(--bg-hard); flex-shrink: 0; } .heatmap-legend-cell[data-level="1"] { background-color: rgba(130,180,19, 0.4); } .heatmap-legend-cell[data-level="2"] { background-color: rgba(130,180,19, 0.6); } .heatmap-legend-cell[data-level="3"] { background-color: rgba(130,180,19, 0.8); } .heatmap-legend-cell[data-level="4"] { background-color: rgba(130,180,19, 1); } @media (max-width: 520px) { .contribution-command { font-size: 0.72rem; line-height: 1.45; } .contribution-total-title { font-size: 1.2rem; margin: 6px 0 8px; } .heatmap-status-row { flex-direction: column; align-items: flex-start; } .contribution-entry { font-size: 0.74rem; } .contribution-entry-header { flex-direction: column; gap: 1px; } .contribution-repo { width: 100%; white-space: normal; overflow-wrap: anywhere; } .contribution-date { max-width: 100%; text-align: left; font-size: 0.64rem; } .contribution-message { white-space: normal; overflow-wrap: anywhere; } }