:root, [data-theme="dark"] { --bg: #17171A; --card-bg: #17171A; --card-border: #CFD1D4; --text-primary: #F7F9FC; --text-secondary: #999BA4; --accent-blue: #0083E2; --divider: #CFD1D4; --icon-color: #F7F9FC; --part-color: #F7F9FC; --part-bg-color: rgba(247, 249, 252, 0.06); --card-shadow: none; } [data-theme="light"] { --bg: #F7F9FC; --card-bg: #F7F9FC; --card-border: #C9CBCE; --text-primary: #393F53; --text-secondary: #6F7588; --accent-blue: #0075CB; --divider: #C9CBCE; --icon-color: #393F53; --part-color: #393F53; --part-bg-color: rgba(57, 63, 83, 0.06); --card-shadow: 0 4px 24px rgba(0, 0, 0, 0.08); } @media (prefers-color-scheme: light) { :root:not([data-theme="dark"]) { --bg: #F7F9FC; --card-bg: #F7F9FC; --card-border: #C9CBCE; --text-primary: #393F53; --text-secondary: #6F7588; --accent-blue: #0075CB; --divider: #C9CBCE; --icon-color: #393F53; --part-color: #393F53; --part-bg-color: rgba(57, 63, 83, 0.06); --card-shadow: 0 4px 24px rgba(0, 0, 0, 0.08); } } *, *::before, *::after { box-sizing: border-box; } body, html { overflow-x: hidden; margin: 0; padding: 0; } body { font-family: Roboto, sans-serif; color: var(--text-primary); background: var(--bg); display: flex; justify-content: center; align-items: center; min-height: 100vh; padding: 2rem 1rem; } p, h1, h2, h3, h4 { margin: 0; } img { max-width: 100%; display: block; } a, a:hover, a:active, a:link, a:focus, a:visited { color: inherit; text-decoration: none; } .theme-transitioning, .theme-transitioning *, .theme-transitioning *::before, .theme-transitioning *::after { transition: color 500ms ease, background-color 500ms ease, border-color 500ms ease, box-shadow 500ms ease, opacity 500ms ease !important; } .vcard { position: relative; z-index: 1; max-width: 1000px; width: 100%; border: 1px solid var(--card-border); border-radius: 12px; background: var(--card-bg); box-shadow: var(--card-shadow); padding: 24px; display: flex; flex-direction: column; gap: 1.25rem; } .vcard-header { display: flex; flex-flow: column; } .vcard-header-right { flex: 1; display: flex; justify-content: space-between; align-items: flex-start; } .vcard-header-title { display: flex; flex-flow: column; gap: 0.25rem; text-align: left; } .vcard-name { font-size: 1.75rem; font-weight: 800; text-transform: uppercase; letter-spacing: 0.05em; line-height: 1.2; } .name-first { color: var(--accent-blue); } .name-last { color: var(--text-primary); } .vcard-subtitle { font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-secondary); } .theme-toggle { background: none; border: none; color: var(--text-primary); cursor: pointer; padding: 6px; border-radius: 6px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; transition: opacity 0.2s; &:hover { opacity: 0.7; } } .vcard-divider { border: none; border-top: 1px solid var(--divider); margin: 0; } .vcard-body { display: flex; flex-direction: column; gap: 1.5rem; } .vcard-image { display: flex; justify-content: center; img { width: 100%; aspect-ratio: 1; max-width: 280px; border-radius: 10px; object-fit: cover; } } .vcard-content { display: flex; flex-flow: column-reverse; gap: 1.25rem; } .vcard-tags { display: flex; flex-wrap: wrap; gap: 0.4rem; justify-content: center; font-size: 0.65rem; font-weight: 500; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-primary); } .tag { border: 1px solid var(--divider); padding: 0.25rem 0.6rem; border-radius: 5px; } .tag-sep { display: none; } .vcard-bio { display: flex; flex-direction: column; gap: 0.75rem; font-size: 0.9rem; line-height: 1.6; color: var(--text-primary); } .animate-letter { display: inline-block; } .vcard-section { display: flex; flex-direction: column; gap: 0.75rem; } .section-title { font-size: 1rem; font-weight: 700; color: var(--accent-blue); } .contact-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.6rem; li { display: flex; align-items: center; gap: 0.6rem; font-size: 0.9rem; color: var(--text-secondary); svg { flex-shrink: 0; color: var(--icon-color); } a { color: var(--text-primary); &:hover { text-decoration: underline; } } } } .social-links { display: flex; flex-direction: column; gap: 0.75rem; } .social-link { display: flex; align-items: center; gap: 0.4rem; font-size: 0.85rem; color: var(--text-primary); &:hover { opacity: 0.7; } svg { flex-shrink: 0; color: var(--icon-color); } span { white-space: nowrap; } } .vcard-footer { font-size: 0.8rem; color: var(--text-secondary); text-align: left; margin-top: 0.5rem; } .stagger-visualizer { position: fixed; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; width: 60rem; height: 30rem; top: 0; rotate: 90deg; } .part { width: 5rem; height: 5rem; border: 1px solid var(--part-bg-color); background-color: var(--part-bg-color); } @media (min-width: 768px) { .vcard { padding: 32px 40px; } .vcard-header { flex-flow: row; gap: .5rem; } .vcard-header-text { text-align: left; } .vcard-body { flex-direction: row; gap: 2rem; } .vcard-image { flex: 0 0 auto; min-width: 220px; align-self: stretch; img { height: 100%; object-fit: cover; border-radius: 10px; } } .vcard-content { flex: 1; min-width: 0; flex-flow: column; } .vcard-tags { justify-content: flex-start; } .social-links { flex-direction: row; flex-wrap: wrap; gap: 1rem; } .stagger-visualizer { width: 120rem; height: 60rem; rotate: unset; } .part { width: 10rem; height: 10rem; } }