:root { --ink:#141414; --paper:#ffffff; --wash:#f5f5f2; --accent:#e30613; --muted:#6b6b66; --line:rgba(20,20,20,.14); --mono:"SF Mono","Cascadia Mono",Consolas,"Courier New",monospace; }
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body { margin:0; overflow-x:clip; background:var(--paper); color:var(--ink); font-family:"Helvetica Neue",Arial,"PingFang SC","Microsoft YaHei",sans-serif; line-height:1.65; }
a { color:inherit; }
.skip-link { position:fixed; z-index:100; top:8px; left:8px; padding:10px 16px; color:white; background:var(--ink); transform:translateY(-150%); }
.skip-link:focus { transform:translateY(0); }
a:focus-visible, button:focus-visible { outline:3px solid var(--accent); outline-offset:3px; }
.topbar { position:sticky; top:0; z-index:50; display:flex; align-items:center; justify-content:space-between; gap:16px; min-height:64px; padding:0 max(20px,calc((100% - 1160px)/2)); background:rgba(255,255,255,.92); backdrop-filter:blur(8px); border-bottom:1px solid var(--line); }
.brand { font-family:var(--mono); font-size:13px; font-weight:700; letter-spacing:.08em; text-decoration:none; min-height:44px; display:inline-flex; align-items:center; }
.topnav { display:flex; gap:4px; }
.topnav a { min-height:44px; display:inline-flex; align-items:center; padding:0 12px; font-size:13px; text-decoration:none; color:var(--muted); border-bottom:2px solid transparent; }
.topnav a.is-active { color:var(--ink); border-bottom-color:var(--accent); }
.demo-badge { font-family:var(--mono); font-size:11px; color:var(--muted); }
.eyebrow { margin:0 0 16px; font-family:var(--mono); font-size:11px; letter-spacing:.2em; color:var(--accent); }
h1,h2,h3 { margin-top:0; font-weight:800; line-height:1.12; letter-spacing:-.02em; }
h1 { margin:0 0 24px; font-size:clamp(42px,9vw,84px); }
h1 em { display:block; margin-top:12px; font-size:clamp(20px,3.4vw,34px); font-style:normal; font-weight:600; color:var(--muted); }
h2 { margin:0 0 18px; font-size:clamp(28px,5vw,46px); }
.hero { min-height:78vh; padding:72px max(20px,calc((100% - 1160px)/2)); display:grid; grid-template-columns:1.2fr .8fr; align-items:center; gap:48px; border-bottom:1px solid var(--line); }
.lead { max-width:520px; color:var(--muted); font-size:17px; }
.actions { margin-top:32px; display:flex; gap:14px; flex-wrap:wrap; }
.button { min-height:48px; padding:0 24px; display:inline-flex; align-items:center; justify-content:center; border:1.5px solid var(--ink); border-radius:0; text-decoration:none; font-size:14px; font-weight:700; cursor:pointer; background:none; font-family:inherit; transition:background .18s ease,color .18s ease; }
.button.primary { background:var(--ink); color:#fff; }
.button.primary:hover { background:var(--accent); border-color:var(--accent); }
.button.secondary:hover { background:var(--ink); color:#fff; }
.portrait { aspect-ratio:1; display:grid; place-items:center; background:var(--ink); overflow:hidden; }
.portrait span { font-family:var(--mono); font-size:clamp(64px,12vw,128px); font-weight:700; color:#fff; letter-spacing:-.06em; }
.facts { display:grid; grid-template-columns:repeat(3,1fr); border-bottom:1px solid var(--line); }
.facts div { padding:36px 20px; display:grid; gap:4px; text-align:center; border-right:1px solid var(--line); }
.facts div:last-child { border-right:0; }
.facts strong { font-family:var(--mono); font-size:clamp(30px,5vw,44px); font-weight:700; }
.facts span { color:var(--muted); font-size:13px; }
.section { padding:72px max(20px,calc((100% - 1160px)/2)); border-bottom:1px solid var(--line); }
.timeline { display:grid; }
.timeline article { padding:24px 0; display:grid; grid-template-columns:150px 1fr; gap:24px; border-top:1px solid var(--line); }
.timeline time { font-family:var(--mono); font-size:13px; color:var(--accent); }
.timeline h3 { margin:0 0 6px; font-size:19px; }
.timeline p { margin:0; color:var(--muted); }
.skill-grid { display:grid; gap:18px; }
.skill-grid article { padding:24px; border:1px solid var(--line); background:var(--wash); }
.skill-grid b { font-family:var(--mono); font-size:12px; color:var(--accent); }
.skill-grid h3 { margin:10px 0 6px; font-size:20px; }
.skill-grid p { margin:0 0 18px; color:var(--muted); font-size:14px; }
.skill-bar { position:relative; height:8px; background:#e2e2dc; overflow:hidden; }
.skill-bar i { position:absolute; inset:0 auto 0 0; width:0; background:var(--ink); transition:width 1s cubic-bezier(.22,.8,.32,1); }
.skill-bar.is-on i { width:var(--level,0%); }
.skill-bar span { position:absolute; right:0; top:-24px; font-family:var(--mono); font-size:12px; color:var(--muted); }
.filter-bar { margin:8px 0 28px; display:flex; flex-wrap:wrap; gap:10px; }
.filter-btn { min-height:44px; padding:0 18px; border:1.5px solid var(--line); background:#fff; font-family:inherit; font-size:13px; font-weight:700; cursor:pointer; transition:all .18s ease; }
.filter-btn:hover { border-color:var(--ink); }
.filter-btn.is-active { background:var(--ink); border-color:var(--ink); color:#fff; }
.project-grid { display:grid; gap:18px; }
.project { padding:30px 26px; color:#fff; min-height:220px; display:flex; flex-direction:column; justify-content:flex-end; gap:8px; transition:opacity .3s ease,transform .3s ease; }
.project.is-hidden { display:none; }
.project span { font-family:var(--mono); font-size:11px; letter-spacing:.14em; opacity:.75; }
.project h3 { margin:0; font-size:clamp(20px,3vw,28px); }
.project p { margin:0; font-size:13px; opacity:.75; }
.project-a { background:#141414; }
.project-b { background:#e30613; }
.project-c { background:#3f4a3c; }
.project-d { background:#27436b; }
.filter-empty { color:var(--muted); font-size:14px; }
.contact { padding:88px max(20px,calc((100% - 1160px)/2)); background:var(--ink); color:#fff; }
.contact .eyebrow { color:#ff8a92; }
.contact p { max-width:520px; color:#b9b9b2; }
.contact-actions { margin-top:28px; display:flex; gap:14px; flex-wrap:wrap; }
.contact .button.primary { background:#fff; border-color:#fff; color:var(--ink); }
.contact .button.primary:hover { background:var(--accent); border-color:var(--accent); color:#fff; }
.contact .button.secondary { border-color:#fff; color:#fff; }
.contact .button.secondary:hover { background:#fff; color:var(--ink); }
.copy-status { min-height:24px; margin-top:14px; font-family:var(--mono); font-size:12px; color:#8fd18f; }
.back-top { position:fixed; right:20px; bottom:20px; z-index:60; width:48px; height:48px; border:1.5px solid var(--ink); background:#fff; font-size:20px; cursor:pointer; box-shadow:3px 3px 0 var(--ink); transition:transform .15s ease,box-shadow .15s ease; }
.back-top:hover { transform:translate(2px,2px); box-shadow:1px 1px 0 var(--ink); }
footer { padding:24px max(20px,calc((100% - 1160px)/2)); display:flex; flex-wrap:wrap; justify-content:space-between; gap:12px; color:var(--muted); font-size:13px; }
.reveal-ready [data-reveal] { opacity:1; }
@media(min-width:800px){ .skill-grid{grid-template-columns:repeat(3,1fr)} .project-grid{grid-template-columns:repeat(2,1fr)} }
@media(max-width:860px){ .hero{grid-template-columns:1fr;min-height:auto} .portrait{max-width:280px} .demo-badge{display:none} }
@media(max-width:640px){ .timeline article{grid-template-columns:1fr;gap:6px} .topnav a{padding:0 8px} }
@media(prefers-reduced-motion:reduce){ html{scroll-behavior:auto} *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important} }
