/* hero.css */ .hero { position: relative; min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 2rem; gap: 3rem; overflow: hidden; } #matrix-canvas { position: absolute; inset: 0; opacity: 0.13; pointer-events: none; } html.theme-light #matrix-canvas { opacity: 0.08; } .hero-left { flex: 1; min-width: 0; position: relative; z-index: 2; } .hero-prompt { font-size: 0.75rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(--accent); margin-bottom: 0.5rem; font-weight: 500; font-family: var(--font-mono); } .hero-name { font-family: var(--font-head); font-size: clamp(3rem, 12vw, 7rem); font-weight: 800; letter-spacing: -0.04em; line-height: 1; margin-bottom: 1rem; position: relative; display: inline-block; } /* Glitch effect on hero name */ .hero-name::before, .hero-name::after { content: attr(data-text); position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; pointer-events: none; overflow: hidden; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: inherit; line-height: inherit; } .hero-name::before { color: #ff2b6d; } .hero-name::after { color: #00e5ff; } .hero-name.is-glitching::before { opacity: 0.8; animation: glitch-red 0.45s steps(3) forwards; } .hero-name.is-glitching::after { opacity: 0.8; animation: glitch-cyn 0.45s steps(3) forwards; } @keyframes glitch-red { 0% { clip-path: inset(0 0 0 0); transform: translate(0); } 20% { clip-path: inset(0 0 65% 0); transform: translate(-0.05em, -0.03em); } 40% { clip-path: inset(28% 0 58% 0); transform: translate(0.05em, 0.03em); } 60% { clip-path: inset(44% 0 58% 0); transform: translate(-0.05em, -0.02em); } 80% { clip-path: inset(12% 0 85% 0); transform: translate(0.05em, 0.02em); } 100% { clip-path: inset(0 0 0 0); transform: translate(0); } } @keyframes glitch-cyn { 0% { clip-path: inset(0 0 0 0); transform: translate(0); } 20% { clip-path: inset(0 0 60% 0); transform: translate(0.05em, 0.02em); } 40% { clip-path: inset(38% 0 58% 0); transform: translate(-0.05em, 0.01em); } 60% { clip-path: inset(19% 0 40% 0); transform: translate(0.025em, -0.02em); } 80% { clip-path: inset(1% 0 58% 0); transform: translate(-0.05em, -0.02em); } 100% { clip-path: inset(0 0 0 0); transform: translate(0); } } .hero-role { font-size: clamp(0.85rem, 3vw, 1rem); letter-spacing: 0.05em; margin-bottom: 1.5rem; color: var(--accent); font-weight: 400; min-height: 1.5em; font-family: var(--font-mono); } .cursor { display: inline-block; width: 0.15em; height: 1em; background: var(--accent); margin-left: 0.1em; animation: cursor-blink 1s step-end infinite; } @keyframes cursor-blink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } } .hero-tagline { font-family: var(--font-body); font-size: 1rem; font-weight: 400; line-height: 1.95; color: var(--text-dim); margin-bottom: 2rem; max-width: 90%; } /* Buttons */ .hero-buttons { display: flex; gap: 1rem; flex-wrap: wrap; margin-bottom: 2rem; } .btn { padding: 0.75rem 1.5rem; font-size: 0.8rem; font-family: var(--font-mono); letter-spacing: 0.1em; text-transform: uppercase; font-weight: 500; cursor: pointer; border: none; transition: all var(--duration-base) ease; text-decoration: none; display: inline-block; border-radius: 0; } .btn-primary { background: var(--accent); color: #000; font-weight: 600; } .btn-primary:hover { box-shadow: 0 0 24px rgba(168, 85, 247, 0.45); transform: translate(0, -2px); } .btn-outline { background: transparent; color: var(--accent); border: 1px solid var(--border); } .btn-outline:hover { background: var(--accent); color: #000; box-shadow: 0 0 24px rgba(168, 85, 247, 0.45); } /* Right column: terminal widget */ .hero-right { flex: 0 0 auto; width: 320px; display: none; position: relative; z-index: 2; } @media (min-width: 1200px) { .hero-right { display: block; } } .hero-terminal { background: rgba(6, 11, 16, 0.85); border: 1px solid rgba(168, 85, 247, 0.3); border-radius: 8px; overflow: hidden; font-size: 0.75rem; line-height: 1.7; } .terminal-bar { background: var(--surface); padding: 0.5rem 1rem; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 0.75rem; } .terminal-dot { width: 12px; height: 12px; border-radius: 50%; display: inline-block; } .terminal-content { padding: 1rem; font-family: var(--font-mono); color: var(--terminal-text, #c4d6e8); } .terminal-content div { white-space: pre-wrap; word-wrap: break-word; } .terminal-prompt { color: var(--terminal-prompt, #00ff88); } /* Scroll Indicator */ .scroll-indicator { position: absolute; bottom: 2rem; left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 0.5rem; font-size: 0.75rem; color: var(--text-dim); animation: bounce 2s infinite; z-index: 2; } .scroll-indicator svg { color: var(--accent); } @keyframes bounce { 0%, 100% { transform: translateX(-50%) translateY(0); } 50% { transform: translateX(-50%) translateY(-8px); } } /* Ambient glow behind hero */ .hero::before { content: ''; position: absolute; top: 50%; left: 50%; width: 600px; height: 600px; background: radial-gradient(circle, rgba(168, 85, 247, 0.15) 0%, transparent 70%); transform: translate(-50%, -50%); pointer-events: none; z-index: 1; } /* Mobile */ @media (max-width: 900px) { .hero { flex-direction: column; min-height: auto; justify-content: flex-start; padding-top: 6rem; } .hero-tagline { max-width: 100%; } .scroll-indicator { display: none; } } @media (prefers-reduced-motion: reduce) { .hero-name.is-glitching::before, .hero-name.is-glitching::after { animation: none; } .scroll-indicator { animation: none; } .cursor { animation: none; } }