:root { color-scheme: dark; --scroll-progress: 0; --bg-grid-x: 0px; --bg-grid-y: 0px; --bg-grid-x-2: 0px; --bg-grid-y-2: 0px; --scene-a: #64cbb8; --scene-b: #8aa4d6; --scene-c: #d77b91; --scene-angle: 128deg; --scene-drift-x: 0vw; --scene-drift-y: 0vh; --scene-rotate: 0deg; --scene-opacity: 0.25; --bg: #08090d; --bg-2: #101217; --ink: #f5f7fb; --muted: #aeb6c8; --soft: #768094; --line: rgba(245, 247, 251, 0.14); --line-strong: rgba(245, 247, 251, 0.28); --panel: rgba(12, 15, 23, 0.68); --panel-strong: rgba(14, 18, 28, 0.86); --accent: #75d0bd; --accent-2: #8ea7dc; --accent-3: #d77b91; --accent-4: #d8bb72; --shadow: 0 18px 46px rgba(0, 0, 0, 0.26); --max: 1180px; --radius: 8px; } html[data-theme="light"] { color-scheme: light; --bg: #f2f5f7; --bg-2: #ffffff; --ink: #11131a; --muted: #4d5668; --soft: #7c879b; --line: rgba(17, 19, 26, 0.13); --line-strong: rgba(17, 19, 26, 0.28); --panel: rgba(255, 255, 255, 0.64); --panel-strong: rgba(255, 255, 255, 0.9); --accent: #137c6d; --accent-2: #4f68a8; --accent-3: #9a4259; --accent-4: #8a6c26; --shadow: 0 18px 46px rgba(17, 19, 26, 0.1); } * { box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; min-height: 100vh; overflow-x: hidden; background: linear-gradient(90deg, rgba(255, 255, 255, 0.022) 1px, transparent 1px), linear-gradient(rgba(255, 255, 255, 0.022) 1px, transparent 1px), linear-gradient(128deg, color-mix(in srgb, var(--scene-b) 5%, transparent), transparent 42%), linear-gradient(244deg, color-mix(in srgb, var(--scene-a) 4%, transparent), transparent 48%), var(--bg); background-size: 36px 36px, 36px 36px, auto, auto, auto; background-position: var(--bg-grid-x) var(--bg-grid-y), var(--bg-grid-x-2) var(--bg-grid-y-2), center, center, center; color: var(--ink); font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", sans-serif; font-size: 15px; line-height: 1.58; letter-spacing: 0; } a { color: inherit; } button, a { -webkit-tap-highlight-color: transparent; } button { font: inherit; } #fluid-canvas { position: fixed; inset: 0; z-index: 1; width: 100vw; height: 100vh; opacity: 0.58; pointer-events: none; } .scene-backdrop { position: fixed; inset: -18vh -14vw; z-index: 0; pointer-events: none; opacity: var(--scene-opacity); background: linear-gradient( var(--scene-angle), color-mix(in srgb, var(--scene-a) 13%, transparent) 0 15%, transparent 46% ), linear-gradient( calc(var(--scene-angle) + 78deg), transparent 0 20%, color-mix(in srgb, var(--scene-b) 12%, transparent) 44%, transparent 72% ), linear-gradient( calc(var(--scene-angle) - 112deg), transparent 0 36%, color-mix(in srgb, var(--scene-c) 9%, transparent) 60%, transparent 82% ), repeating-linear-gradient( calc(var(--scene-angle) + 12deg), rgba(255, 255, 255, 0.026) 0 1px, transparent 1px 32px ); filter: saturate(0.82) blur(0.2px); transform: translate3d(var(--scene-drift-x), var(--scene-drift-y), 0) rotate(var(--scene-rotate)) scale(1.02); transform-origin: 56% 42%; will-change: transform, opacity, background; } .grain { position: fixed; inset: 0; z-index: 1; pointer-events: none; opacity: 0.12; background-image: linear-gradient(115deg, transparent 0 42%, rgba(255, 255, 255, 0.08) 43%, transparent 44%), repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.035) 0 1px, transparent 1px 4px); mix-blend-mode: overlay; } .progress { position: fixed; top: 0; left: 0; z-index: 80; width: 100%; height: 3px; transform: scaleX(0); transform-origin: left; background: linear-gradient(90deg, var(--accent), var(--accent-2), var(--accent-3), var(--accent-4)); } .site-header { position: sticky; top: 0; z-index: 70; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; min-height: 68px; padding: 0 clamp(1rem, 3vw, 2rem); border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--bg) 74%, transparent); backdrop-filter: blur(14px); } .brand-mark { display: inline-flex; align-items: center; gap: 0.72rem; width: fit-content; text-decoration: none; } .brand-mark span { display: grid; place-items: center; width: 36px; height: 36px; border: 1px solid var(--line-strong); border-radius: 50%; background: var(--ink); color: var(--bg); font-size: 0.72rem; font-weight: 900; } .brand-mark strong { font-size: 0.92rem; } .site-nav { display: flex; align-items: center; gap: 0.15rem; padding: 0.32rem; border: 1px solid var(--line); border-radius: 999px; background: var(--panel); } .site-nav a { display: inline-flex; align-items: center; justify-content: center; min-height: 31px; padding: 0 0.74rem; border-radius: 999px; color: var(--muted); text-decoration: none; font-size: 0.78rem; font-weight: 750; transition: color 160ms ease, background 160ms ease; } .site-nav a:hover, .site-nav a.active { color: var(--bg); background: var(--ink); } .header-actions { justify-self: end; display: flex; align-items: center; gap: 0.45rem; } .icon-link { display: grid; place-items: center; width: 36px; height: 36px; border: 1px solid var(--line); border-radius: 50%; background: var(--panel); color: var(--ink); cursor: pointer; text-decoration: none; transition: transform 180ms ease, border-color 180ms ease, background 180ms ease; } .icon-link:hover { transform: translateY(-1px); border-color: var(--line-strong); background: var(--panel-strong); } .icon-link svg { width: 18px; height: 18px; } main, footer { position: relative; z-index: 2; } .hero { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) minmax(300px, 0.54fr); grid-template-rows: auto auto; gap: clamp(1rem, 4vw, 3rem); max-width: var(--max); min-height: calc(86svh - 68px); margin: 0 auto; padding: clamp(3rem, 7vw, 6rem) clamp(1rem, 4vw, 2rem) clamp(2rem, 5vw, 4rem); align-items: end; } .hero::before { content: none; } .hero-meta { grid-row: 1 / span 2; align-self: center; max-width: 760px; } .eyebrow, .section-kicker, .section-heading p { margin: 0 0 0.78rem; color: var(--accent); font-size: 0.72rem; font-weight: 850; letter-spacing: 0.12em; text-transform: uppercase; overflow-wrap: anywhere; } .hero h1 { margin: 0; font-size: clamp(3.8rem, 12vw, 8.8rem); line-height: 0.9; letter-spacing: 0; } .hero-subtitle { margin: 0.92rem 0 0; color: var(--accent-4); font-size: clamp(1.24rem, 3.1vw, 2.5rem); font-weight: 900; line-height: 1.02; } .hero-lede { max-width: 600px; margin: 1.2rem 0 0; color: var(--muted); font-size: clamp(0.98rem, 1.38vw, 1.16rem); } .hero-actions, .contact-actions { display: flex; flex-wrap: wrap; gap: 0.65rem; margin-top: 1.5rem; } .button { display: inline-flex; align-items: center; justify-content: center; min-height: 40px; padding: 0 0.95rem; border: 1px solid var(--line-strong); border-radius: 999px; background: var(--panel); color: var(--ink); text-decoration: none; font-size: 0.86rem; font-weight: 800; transition: transform 180ms ease, background 180ms ease, border-color 180ms ease; } .button:hover { transform: translateY(-2px); border-color: var(--ink); background: var(--panel-strong); } .button.primary { border-color: var(--ink); background: var(--ink); color: var(--bg); } .signal-board { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px; align-self: end; border: 1px solid var(--line-strong); border-radius: var(--radius); background: var(--line-strong); overflow: hidden; } .signal-board div { min-height: 110px; padding: 0.95rem; background: color-mix(in srgb, var(--bg-2) 90%, transparent); } .signal-board span { display: block; color: var(--soft); font-size: 0.72rem; font-weight: 850; text-transform: uppercase; } .signal-board strong { display: block; margin-top: 0.48rem; font-size: clamp(1rem, 2vw, 1.32rem); line-height: 1.12; } .profile-panel { align-self: start; display: grid; gap: 1px; border: 1px solid var(--line-strong); border-radius: var(--radius); background: var(--line-strong); overflow: hidden; } .profile-panel div { padding: 1rem; background: color-mix(in srgb, var(--bg-2) 88%, transparent); } .profile-panel span { display: block; color: var(--soft); font-size: 0.72rem; font-weight: 850; } .profile-panel strong { display: block; margin-top: 0.38rem; color: var(--ink); font-size: 0.92rem; line-height: 1.35; } .ai-fit-section, .proof-strip, .work-section, .skills-section, .experience-section, .contact-section { max-width: var(--max); margin: 0 auto; padding: clamp(3.2rem, 7vw, 6rem) clamp(1rem, 4vw, 2rem); } .proof-strip { display: grid; grid-template-columns: 0.4fr 0.8fr; gap: clamp(1.2rem, 4vw, 3rem); align-items: start; border-top: 1px solid var(--line-strong); } .ai-fit-section { border-top: 1px solid var(--line-strong); } .ai-focus-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; border: 1px solid var(--line-strong); border-radius: var(--radius); background: var(--line-strong); overflow: hidden; } .resume-signal-panel { display: grid; grid-template-columns: minmax(220px, 0.42fr) minmax(0, 1fr); gap: clamp(1rem, 3vw, 2rem); margin-top: 1rem; padding: clamp(1rem, 2.5vw, 1.35rem); border: 1px solid var(--line-strong); border-radius: var(--radius); background: color-mix(in srgb, var(--bg-2) 86%, transparent); } .resume-signal-panel p { margin: 0 0 0.5rem; color: var(--accent); font-size: 0.72rem; font-weight: 900; letter-spacing: 0.12em; text-transform: uppercase; } .resume-signal-panel h3 { margin: 0; font-size: clamp(1.08rem, 2.3vw, 1.55rem); line-height: 1.14; } .resume-signal-panel ul { display: grid; gap: 0.62rem; margin: 0; padding-left: 1.05rem; } .resume-signal-panel li { color: var(--muted); font-size: 0.9rem; } .ai-focus-card { min-height: 254px; padding: 1rem; background: color-mix(in srgb, var(--bg-2) 88%, transparent); transition: transform 220ms ease, background 220ms ease, border-color 220ms ease; } .ai-focus-card:hover { transform: translateY(-2px); background: color-mix(in srgb, var(--bg-2) 96%, transparent); } .ai-focus-card > span { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border: 1px solid var(--line); border-radius: 50%; color: var(--accent-4); font-size: 0.78rem; font-weight: 950; } .ai-focus-card h3 { margin: 1rem 0 0; font-size: 1.08rem; line-height: 1.15; } .ai-focus-card p { margin: 0.72rem 0 0; color: var(--muted); font-size: 0.88rem; } .ai-focus-card div { display: flex; flex-wrap: wrap; gap: 0.38rem; margin-top: 1rem; } .ai-focus-card em { display: inline-flex; align-items: center; min-height: 26px; padding: 0 0.55rem; border: 1px solid var(--line); border-radius: 999px; color: var(--muted); font-size: 0.72rem; font-style: normal; font-weight: 800; } .proof-strip h2, .section-heading h2, .contact-section h2 { margin: 0; font-size: clamp(1.72rem, 4vw, 3.42rem); line-height: 1.02; letter-spacing: 0; } .metric-row { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 1px; border: 1px solid var(--line-strong); border-radius: var(--radius); background: var(--line-strong); overflow: hidden; } .metric-row article { min-height: 126px; padding: 1rem; background: var(--panel-strong); } .metric-row strong { display: block; color: var(--accent-4); font-size: clamp(1.55rem, 3vw, 2.62rem); line-height: 1; } .metric-row span { display: block; margin-top: 0.7rem; color: var(--muted); font-size: 0.82rem; font-weight: 750; } .section-heading { display: grid; grid-template-columns: 0.36fr minmax(0, 0.82fr); gap: clamp(1rem, 4vw, 3rem); align-items: start; margin-bottom: 1.4rem; } .project-stack { display: grid; gap: 0.9rem; } .project-card { display: grid; grid-template-columns: 100px minmax(0, 1fr); gap: 0; border: 1px solid var(--line-strong); border-radius: var(--radius); background: var(--panel-strong); overflow: hidden; transition: transform 180ms ease, border-color 180ms ease, background 180ms ease; } .project-card:nth-child(even) { margin-left: clamp(0rem, 8vw, 7rem); } .project-card:hover, .project-card.is-hovered { transform: translateY(-2px); border-color: color-mix(in srgb, var(--accent-2) 60%, var(--line-strong)); background: color-mix(in srgb, var(--bg-2) 94%, transparent); } .project-index { display: flex; flex-direction: column; align-items: center; gap: 1rem; padding: 1rem 0.75rem; border-right: 1px solid var(--line); color: var(--soft); font-size: 0.82rem; font-weight: 950; } .logo-frame { display: grid; place-items: center; width: 48px; height: 48px; border: 1px solid var(--line); border-radius: var(--radius); background: color-mix(in srgb, var(--bg-2) 82%, transparent); overflow: hidden; } .logo-frame img { display: block; width: 78%; height: 78%; object-fit: contain; } .project-body { padding: clamp(1rem, 2.4vw, 1.45rem); } .project-head { display: flex; justify-content: space-between; gap: 1rem; } .project-head h3 { margin: 0; font-size: clamp(1.18rem, 2.4vw, 2rem); line-height: 1.05; } .project-head p { margin: 0.3rem 0 0; color: var(--accent); font-size: 0.88rem; font-weight: 850; } .project-head time { flex: 0 0 auto; color: var(--accent-3); font-size: 0.78rem; font-weight: 900; } .project-summary { margin: 1rem 0 0; color: var(--muted); font-size: 0.94rem; } .project-card ul { margin: 0.9rem 0 0; padding-left: 1.1rem; } .project-card li, .timeline li { margin-bottom: 0.45rem; color: var(--muted); font-size: 0.88rem; } .tech-row { display: flex; flex-wrap: wrap; gap: 0.42rem; margin-top: 1rem; } .tech-row span, .skill-group span { display: inline-flex; align-items: center; min-height: 28px; padding: 0 0.62rem; border: 1px solid var(--line); border-radius: 999px; background: var(--panel); color: var(--muted); font-size: 0.76rem; font-weight: 800; } .skill-matrix { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.85rem; } .skill-group { min-height: 176px; padding: 1rem; border: 1px solid var(--line-strong); border-radius: var(--radius); background: color-mix(in srgb, var(--bg-2) 84%, transparent); } .skill-group:nth-child(2n) { transform: translateY(1.6rem); } .skill-group h3 { margin: 0 0 0.82rem; font-size: 1rem; } .skill-group div { display: flex; flex-wrap: wrap; gap: 0.42rem; } .timeline { display: grid; gap: 1px; border: 1px solid var(--line-strong); border-radius: var(--radius); background: var(--line-strong); overflow: hidden; } .timeline article { display: grid; grid-template-columns: 230px minmax(0, 1fr); gap: 1rem; padding: 1rem; background: var(--panel-strong); } .timeline-side { display: grid; align-content: start; gap: 0.7rem; } .timeline time { color: var(--accent-2); font-size: 0.82rem; font-weight: 900; } .timeline h3 { margin: 0; font-size: 1.08rem; } .timeline p { margin: 0.25rem 0 0.75rem; color: var(--accent-4); font-size: 0.88rem; font-weight: 850; } .timeline ul { margin: 0; padding-left: 1.1rem; } .contact-section { display: grid; grid-template-columns: minmax(0, 0.85fr) minmax(280px, 0.55fr); gap: clamp(1.2rem, 5vw, 3rem); align-items: center; margin-bottom: 3rem; border-top: 1px solid var(--line-strong); } .contact-section span { display: block; margin-top: 0.82rem; color: var(--muted); } .contact-actions { margin: 0; justify-content: flex-end; } footer { padding: 1.4rem 1rem 2rem; color: var(--soft); text-align: center; font-size: 0.8rem; } .reveal { opacity: 0; transform: translate3d(0, 14px, 0); transition: opacity 460ms ease, transform 520ms ease; } .reveal.is-visible { opacity: 1; transform: translate3d(0, 0, 0); } .hero .reveal { opacity: 1; transform: none; } @media (max-width: 1040px) { .site-header { grid-template-columns: auto 1fr auto; } .site-nav { justify-self: center; } .hero { grid-template-columns: 1fr; min-height: auto; } .hero-meta { grid-row: auto; } .signal-board, .profile-panel { max-width: 680px; } .metric-row, .ai-focus-grid, .skill-matrix { grid-template-columns: repeat(2, minmax(0, 1fr)); } .skill-group:nth-child(2n) { transform: none; } } @media (max-width: 760px) { body { font-size: 14px; } #fluid-canvas { opacity: 0.42; } .site-header { grid-template-columns: 1fr auto; min-height: 60px; } .brand-mark strong, .site-nav { display: none; } .hero { padding-top: 2.6rem; } .eyebrow { font-size: 0.62rem; line-height: 1.35; letter-spacing: 0.1em; } .hero h1 { font-size: clamp(4rem, 24vw, 7rem); } .reveal { transform: translate3d(0, 14px, 0); } .signal-board, .proof-strip, .section-heading, .ai-focus-grid, .resume-signal-panel, .metric-row, .skill-matrix, .timeline article, .contact-section { grid-template-columns: 1fr; } .metric-row { grid-template-columns: repeat(2, minmax(0, 1fr)); } .project-card, .project-card:nth-child(even) { grid-template-columns: 1fr; margin-left: 0; } .project-index { flex-direction: row; justify-content: space-between; padding: 0.8rem 1rem; border-right: 0; border-bottom: 1px solid var(--line); } .project-head { display: block; } .project-head time { display: block; margin-top: 0.5rem; } .contact-actions { justify-content: flex-start; } } @media (max-width: 460px) { .hero-actions, .contact-actions { flex-direction: column; } .button { width: 100%; } .metric-row { grid-template-columns: 1fr; } .signal-board { grid-template-columns: 1fr; } } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } #fluid-canvas { display: none; } *, *::before, *::after { animation: none !important; transition: none !important; } .reveal { opacity: 1; transform: none; } }