* { margin: 0; padding: 0; } canvas { display: block; } :root { --bg-color: #ffffff; --text-color: #222222; --accent-color: #ff7f50; --section-alt-bg: #fff7f5; --c-glass: #bbbbbc; --c-light: #fff; --c-dark: #000; --c-content: var(--text-color); --c-action: var(--accent-color); --c-bg: var(--bg-color); --glass-reflex-dark: 1; --glass-reflex-light: 1; --saturation: 150%; } body:has(input[value="dark"]:checked) { --bg-color: #1b1b1d; --text-color: #e1e1e1; --section-alt-bg: #2a2a2a; --accent-color: #03d5ff; --c-glass: #bbbbbc; --c-light: #fff; --c-dark: #000; --c-content: #e1e1e1; --c-action: #03d5ff; --c-bg: #1b1b1d; --glass-reflex-dark: 2; --glass-reflex-light: 0.3; --saturation: 150%; } body:has(input[value="dim"]:checked) { --bg-color: #152433; --text-color: #d5dbe2; --section-alt-bg: #203343; --accent-color: #ff48a9; --c-light: #99deff; --c-dark: #20001b; --c-glass: hsl(335 250% 74% / 1); --c-content: #d5dbe2; --c-action: #ff48a9; --c-bg: #152433; --glass-reflex-dark: 2; --glass-reflex-light: 0.7; --saturation: 200%; } html, body { margin: 0; padding: 0; background: var(--bg-color); color: var(--text-color); font-family: system-ui, sans-serif; scroll-behavior: smooth; transition: background 400ms cubic-bezier(1, 0.0, 0.4, 1), color 400ms cubic-bezier(1, 0.0, 0.4, 1); } #progress-bar { position: fixed; top: 0; left: 0; height: 4px; width: 0; background: var(--accent-color); z-index: 2000; transition: width 0.25s ease; } .matrix-canvas { position: fixed; top: 0; width: 250px; height: 100vh; pointer-events: none; z-index: 10; background: #000; } #matrix-left { left: 0; } #matrix-right { right: 0; } /* Theme switcher */ /* Position theme switcher inline with top navigation bar */ .switcher { position: fixed; z-index: 1100; top: 4px; right: 20px; left: auto; margin: 0; transform: scale(0.5); transform-origin: top right; display: flex; align-items: center; gap: 8px; width: 244px; max-width: 244px; height: 70px; box-sizing: border-box; padding: 8px 12px 10px; border: none; border-radius: 99em; font-size: var(--fz); background-color: color-mix(in srgb, var(--c-glass) 12%, transparent); backdrop-filter: blur(8px) saturate(var(--saturation)); -webkit-backdrop-filter: blur(8px) saturate(var(--saturation)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--c-light) calc(var(--glass-reflex-light) * 10%), transparent), inset 1.8px 3px 0px -2px color-mix(in srgb, var(--c-light) calc(var(--glass-reflex-light) * 90%), transparent), inset -2px -2px 0px -2px color-mix(in srgb, var(--c-light) calc(var(--glass-reflex-light) * 80%), transparent), inset -3px -8px 1px -6px color-mix(in srgb, var(--c-light) calc(var(--glass-reflex-light) * 60%), transparent), inset -0.3px -1px 4px 0px color-mix(in srgb, var(--c-dark) calc(var(--glass-reflex-dark) * 12%), transparent), inset -1.5px 2.5px 0px -2px color-mix(in srgb, var(--c-dark) calc(var(--glass-reflex-dark) * 20%), transparent), inset 0px 3px 4px -2px color-mix(in srgb, var(--c-dark) calc(var(--glass-reflex-dark) * 20%), transparent), inset 2px -6.5px 1px -4px color-mix(in srgb, var(--c-dark) calc(var(--glass-reflex-dark) * 10%), transparent), 0px 1px 5px 0px color-mix(in srgb, var(--c-dark) calc(var(--glass-reflex-dark) * 10%), transparent), 0px 6px 16px 0px color-mix(in srgb, var(--c-dark) calc(var(--glass-reflex-dark) * 8%), transparent); transition: background-color 400ms cubic-bezier(1, 0.0, 0.4, 1), box-shadow 400ms cubic-bezier(1, 0.0, 0.4, 1); } .switcher__legend { position: absolute; width: 1px; height: 1px; margin: -1px; border: 0; padding: 0; white-space: nowrap; clip-path: inset(100%); clip: rect(0 0 0 0); overflow: hidden; } .switcher__input { clip: rect(0 0 0 0); clip-path: inset(100%); height: 1px; width: 1px; overflow: hidden; position: absolute; white-space: nowrap; } .switcher__icon { display: block; width: 100%; transition: scale 200ms cubic-bezier(0.5, 0, 0, 1); } .switcher__option { --c: var(--c-content); display: flex; justify-content: center; align-items: center; padding: 0 16px; width: 68px; height: 100%; box-sizing: border-box; border-radius: 99em; opacity: 1; transition: all 160ms; color: var(--c); } .switcher__option:hover { --c: var(--c-action); cursor: pointer; } .switcher__option:hover .switcher__icon { scale: 1.2; } .switcher__option:has(input:checked) { --c: var(--c-content); cursor: auto; } .switcher__option:has(input:checked) .switcher__icon { scale: 1; } .switcher::after { content: ''; position: absolute; left: 4px; top: 4px; display: block; width: 84px; height: calc(100% - 10px); border-radius: 99em; background-color: color-mix(in srgb, var(--c-glass) 36%, transparent); z-index: -1; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--c-light) calc(var(--glass-reflex-light) * 10%), transparent), inset 2px 1px 0px -1px color-mix(in srgb, var(--c-light) calc(var(--glass-reflex-light) * 90%), transparent), inset -1.5px -1px 0px -1px color-mix(in srgb, var(--c-light) calc(var(--glass-reflex-light) * 80%), transparent), inset -2px -6px 1px -5px color-mix(in srgb, var(--c-light) calc(var(--glass-reflex-light) * 60%), transparent), inset -1px 2px 3px -1px color-mix(in srgb, var(--c-dark) calc(var(--glass-reflex-dark) * 20%), transparent), inset 0px -4px 1px -2px color-mix(in srgb, var(--c-dark) calc(var(--glass-reflex-dark) * 10%), transparent), 0px 3px 6px 0px color-mix(in srgb, var(--c-dark) calc(var(--glass-reflex-dark) * 8%), transparent); } .switcher:has(input[c-option="1"]:checked)::after { translate: 0 0; transform-origin: right; transition: background-color 400ms cubic-bezier(1, 0.0, 0.4, 1), box-shadow 400ms cubic-bezier(1, 0.0, 0.4, 1), translate 400ms cubic-bezier(1, 0.0, 0.4, 1); animation: scaleToggle 440ms ease; } .switcher:has(input[c-option="2"]:checked)::after { translate: 76px 0; transition: background-color 400ms cubic-bezier(1, 0.0, 0.4, 1), box-shadow 400ms cubic-bezier(1, 0.0, 0.4, 1), translate 400ms cubic-bezier(1, 0.0, 0.4, 1); animation: scaleToggle2 440ms ease; } .switcher[c-previous="1"]:has(input[c-option="2"]:checked)::after { transform-origin: left; } .switcher[c-previous="3"]:has(input[c-option="2"]:checked)::after { transform-origin: right; } .switcher:has(input[c-option="3"]:checked)::after { translate: 152px 0; transform-origin: left; transition: background-color 400ms cubic-bezier(1, 0.0, 0.4, 1), box-shadow 400ms cubic-bezier(1, 0.0, 0.4, 1), translate 400ms cubic-bezier(1, 0.0, 0.4, 1); animation: scaleToggle3 440ms ease; } @keyframes scaleToggle { 0% { scale: 1 1; } 50% { scale: 1.1 1; } 100% { scale: 1 1; } } @keyframes scaleToggle2{ 0% { scale: 1 1; } 50% { scale: 1.2 1; } 100% { scale: 1 1; } } @keyframes scaleToggle3 { 0% { scale: 1 1; } 50% { scale: 1.1 1; } 100% { scale: 1 1; } } .navbar { position: sticky; top: 4px; width: 100%; display: flex; justify-content: center; align-items: center; gap: 1rem; padding: 0.5rem 1rem; background: var(--bg-color); box-shadow: 0 2px 4px rgba(0,0,0,0.1); z-index: 1000; } .logo { font-weight: bold; color: var(--accent-color); position: absolute; left: 1rem; } .nav-links { list-style: none; display: flex; gap: 1rem; margin: 0 auto; padding: 0; } #nav-toggle { display: none; background: none; border: none; font-size: 1.5rem; cursor: pointer; position: absolute; right: 1rem; } .nav-links a { text-decoration: none; color: var(--text-color); transition: color 0.3s; } .nav-links a:hover { color: var(--accent-color); } .nav-links a.active { color: var(--accent-color); border-bottom: 2px solid var(--accent-color); } .section { --tiltX: 0deg; --tiltY: 0deg; padding: 4rem 1rem; max-width: 800px; margin: auto; transform-style: preserve-3d; transform: perspective(800px) rotateX(var(--tiltY)) rotateY(var(--tiltX)); transition: transform 0.2s ease; background: var(--section-alt-bg); position: relative; overflow: hidden; } .section > * { position: relative; z-index: 1; } .code-bg { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-family: monospace; font-size: 1.3rem; color: var(--accent-color); opacity: 0; pointer-events: none; user-select: none; text-shadow: 0 0 10px var(--accent-color); transition: opacity 1s ease; animation: float 6s ease-in-out infinite; } @keyframes float { 0% { transform: translate(-50%, -50%) translateY(0); } 50% { transform: translate(-50%, -50%) translateY(-10px); } 100% { transform: translate(-50%, -50%) translateY(0); } } .hidden { opacity: 0; transform: perspective(800px) rotateX(var(--tiltY)) rotateY(var(--tiltX)) translateY(20px); transition: opacity 0.6s ease, transform 0.6s ease; } .show { opacity: 1; transform: perspective(800px) rotateX(var(--tiltY)) rotateY(var(--tiltX)) translateY(0); } .timeline .entry { margin-bottom: 1.5rem; } .section ul { list-style: disc; padding-left: 1.25rem; margin: 1rem 0; } .skill-list { columns: 2; list-style: disc inside; padding-left: 1rem; } .skill-list li i, .entry h3 i { margin-right: 0.5rem; color: var(--accent-color); } #contact-content p { display: flex; align-items: center; gap: 0.75rem; } .contact-link { display: flex; align-items: center; gap: 0.5rem; text-decoration: none; color: inherit; } .contact-link i { font-size: 1.25rem; color: var(--accent-color); transition: transform 0.3s; } .contact-link:hover i { transform: scale(1.1); } .copy-btn { background: none; border: none; cursor: pointer; font-size: 1rem; color: var(--accent-color); display: flex; align-items: center; } .copy-btn:focus { outline: 2px solid var(--accent-color); } .btn { display: inline-block; background: var(--accent-color); color: #fff; padding: 0.5rem 1rem; border-radius: 4px; text-decoration: none; transition: opacity 0.3s; } .btn:hover { opacity: 0.9; } .footer { position: fixed; bottom: 0.5rem; left: 0.5rem; z-index: 1001; } .footer .copyright-icon { position: relative; cursor: pointer; font-size: 1.25rem; } .footer .copyright-tooltip { visibility: hidden; opacity: 0; position: absolute; bottom: 100%; left: 0; background: var(--bg-color); color: var(--text-color); padding: 0.25rem 0.5rem; border-radius: 4px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); white-space: nowrap; transition: opacity 0.2s; transform: translateY(-0.25rem); z-index: 1000; } .footer .copyright-icon:hover .copyright-tooltip, .footer .copyright-icon.active .copyright-tooltip { visibility: visible; opacity: 1; } .profile-pic { width: 150px; height: 150px; border-radius: 50%; object-fit: cover; display: block; margin: 0 auto 1rem; } .tagline { display: inline-block; white-space: pre-wrap; width: fit-content; max-width: 100%; margin: 0 auto; } .tagline::after { content: ''; display: inline-block; width: 2px; height: 1em; margin-left: 0.2rem; background: var(--accent-color); animation: blink-cursor 0.8s steps(2, start) infinite; vertical-align: bottom; } #summary { white-space: pre-wrap; } /* Contact dropdown styles */ .contact-card { border: 1px solid var(--accent-color); border-radius: 8px; max-width: 400px; margin: 0 auto; background: rgba(0, 0, 0, 0.05); overflow: hidden; } .contact-toggle { width: 100%; background: none; border: none; font: inherit; color: inherit; cursor: pointer; display: flex; justify-content: space-between; align-items: center; padding: 1rem; } .contact-toggle .toggle-icon { transition: transform 0.3s ease; } .contact-toggle.open .toggle-icon { transform: rotate(180deg); } .contact-content { max-height: 0; overflow: hidden; transition: max-height 0.5s ease, padding 0.3s ease; padding: 0 1rem; } .contact-content.open { padding: 1rem; } #back-to-top { position: fixed; bottom: 2rem; right: 2rem; z-index: 1000; width: 3rem; height: 3rem; display: flex; align-items: center; justify-content: center; border: none; border-radius: 50%; background: var(--accent-color); color: #fff; cursor: pointer; opacity: 0; pointer-events: none; transition: opacity 0.3s ease, transform 0.3s ease; } #back-to-top.show { opacity: 1; pointer-events: auto; } #back-to-top:hover { transform: scale(1.1); } @media (min-width: 901px) { #back-to-top { right: calc(250px + 2rem); } } @media (max-width: 900px) { .matrix-canvas { display: none; } } @keyframes bounce { 0%, 100% { transform: translateY(0) scale(1); } 50% { transform: translateY(-5px) scale(1.2); } } @keyframes blink-cursor { from { border-right-color: var(--accent-color); } to { border-right-color: transparent; } } @media (max-width: 600px) { .navbar { justify-content: center; } #nav-toggle { display: block; } .nav-links { position: absolute; top: 100%; left: 0; right: 0; flex-direction: column; background: var(--bg-color); gap: 0; display: none; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .nav-links.show { display: flex; } .nav-links a { padding: 0.75rem 1rem; display: block; } .skill-list { columns: 1; } #back-to-top { bottom: 1rem; right: 1rem; width: 2.5rem; height: 2.5rem; } } #intro-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(25,25,25,1); overflow: hidden; z-index: 3000; display: flex; } #main-content { display: none; } #main-content.show { display: block; } #blackhole { height: 100%; width: 100%; position: relative; display: flex; } #blackhole canvas { position: relative; z-index: 1; width: 100%; height: 100%; margin: auto; } .centerHover { width: 255px; height: 255px; background-color: transparent; border-radius: 50%; position: absolute; left: 50%; top: 50%; margin-top: -128px; margin-left: -128px; z-index: 2; cursor: pointer; line-height: 255px; text-align: center; transition: all 500ms; } .centerHover.open { opacity: 0; pointer-events: none; } .centerHover span { color: #666; font-family: serif; font-size: 18px; position: relative; transition: all 500ms; } .centerHover span:before, .centerHover span:after { content: ''; display: inline-block; height: 1px; width: 16px; margin: 0 12px 4px; background-color: #666; transition: all 500ms; } .centerHover:hover span { color: #DDD; } .centerHover:hover span:before, .centerHover:hover span:after { background-color: #DDD; } /* Layout for two-column CV */ .cv-container { display: grid; grid-template-columns: 1fr 2fr; gap: 2rem; align-items: start; max-width: 1200px; margin: 0 auto; width: 100%; } .sidebar, .content { display: flex; flex-direction: column; gap: 2rem; min-width: 0; } .cv-container .section { max-width: none; margin: 0; padding: 1.5rem; } .cv-container .contact-card { margin: 0; } @media (max-width: 800px) { .cv-container { display: flex; flex-direction: column; padding: 0 1rem; } .content { order: 1; } .sidebar { order: 2; } #skills { order: 1; } #projects { order: 2; } #certifications { order: 3; } #achievements { order: 4; } #contact { order: 5; } .matrix-canvas { display: none; } }