:root{--ink: #f5f7ec;--ink-muted: #b8c6c6;--ink-soft: #84989a;--night: #071019;--night-deep: #02060a;--night-veil: rgba(7, 16, 25, .74);--paper: #f4efe0;--paper-deep: #e7dfcc;--paper-ink: #182026;--paper-muted: #50605d;--line: rgba(191, 246, 228, .2);--line-strong: rgba(201, 255, 238, .42);--green: #70ff9e;--cyan: #61f2ff;--blue: #5489ff;--red: #ff5d6f;--violet: #b572ff;--gold: #ffe7a8;--shadow: 0 28px 90px rgba(0, 0, 0, .36);--page: 1120px;--radius: 8px;color:var(--ink);background:var(--night-deep);font-family:IBM Plex Sans,Helvetica Neue,sans-serif}*{box-sizing:border-box}html{background:var(--night-deep);scroll-behavior:smooth}body{position:relative;margin:0;min-height:100vh;overflow-x:hidden;background:radial-gradient(135% 70% at 50% -12%,rgba(112,255,158,.12),transparent 56%),radial-gradient(90% 60% at 82% -4%,rgba(181,114,255,.11),transparent 60%),radial-gradient(80% 55% at 18% 2%,rgba(97,242,255,.09),transparent 60%),linear-gradient(180deg,rgba(2,6,10,.22),var(--night-deep) 70%),linear-gradient(158deg,#04111c,#061826 42%,#0d0a1e);color:var(--ink)}body:before{position:fixed;inset:-16vh -22vw auto -22vw;z-index:0;height:88vh;background:repeating-linear-gradient(95deg,transparent 0 2.4rem,rgba(112,255,158,.17) 3.3rem,rgba(97,242,255,.21) 4.6rem,transparent 6rem 8.5rem),repeating-linear-gradient(87deg,transparent 0 3.2rem,rgba(181,114,255,.14) 4.8rem,rgba(84,137,255,.16) 6.4rem,transparent 8rem 12.5rem);background-size:220% 100%,250% 100%;background-position:0% 0%,100% 0%;content:"";filter:blur(34px) saturate(165%);mask-image:linear-gradient(to bottom,rgba(0,0,0,.96) 0%,rgba(0,0,0,.55) 42%,transparent 82%);-webkit-mask-image:linear-gradient(to bottom,rgba(0,0,0,.96) 0%,rgba(0,0,0,.55) 42%,transparent 82%);opacity:.95;pointer-events:none;transform:skew(-8deg);animation:aurora-drift 28s ease-in-out infinite alternate}body:after{position:fixed;inset:0;z-index:0;background-image:radial-gradient(1.5px 1.5px at 12% 16%,rgba(255,255,255,.9),transparent 60%),radial-gradient(1.5px 1.5px at 27% 40%,rgba(214,247,255,.8),transparent 60%),radial-gradient(1px 1px at 41% 11%,rgba(255,255,255,.75),transparent 60%),radial-gradient(1.5px 1.5px at 56% 26%,rgba(255,255,255,.85),transparent 60%),radial-gradient(1px 1px at 67% 14%,rgba(214,247,255,.7),transparent 60%),radial-gradient(1.5px 1.5px at 81% 34%,rgba(255,255,255,.8),transparent 60%),radial-gradient(1px 1px at 91% 20%,rgba(255,255,255,.7),transparent 60%),radial-gradient(1px 1px at 19% 58%,rgba(255,255,255,.58),transparent 60%),radial-gradient(1px 1px at 48% 52%,rgba(255,255,255,.5),transparent 60%),radial-gradient(1.5px 1.5px at 73% 60%,rgba(255,255,255,.6),transparent 60%),radial-gradient(1px 1px at 34% 70%,rgba(255,255,255,.42),transparent 60%),radial-gradient(1px 1px at 88% 64%,rgba(255,255,255,.4),transparent 60%),radial-gradient(1px 1px at 6% 36%,rgba(255,255,255,.55),transparent 60%),radial-gradient(1px 1px at 62% 6%,rgba(255,255,255,.65),transparent 60%);content:"";mask-image:linear-gradient(to bottom,rgba(0,0,0,.95),rgba(0,0,0,.45) 55%,transparent 88%);-webkit-mask-image:linear-gradient(to bottom,rgba(0,0,0,.95),rgba(0,0,0,.45) 55%,transparent 88%);opacity:.85;pointer-events:none;animation:twinkle 7s ease-in-out infinite alternate}a{color:inherit;text-decoration:none}a:focus-visible{outline:3px solid var(--cyan);outline-offset:4px}.site-nav{position:absolute;top:0;left:0;right:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.7rem clamp(1.5rem,4vw,3.5rem) 1rem;pointer-events:none}.site-nav a,.site-nav nav{pointer-events:auto}.site-name{display:inline-flex;align-items:center;gap:.7rem;color:var(--ink);font-family:Fraunces,Georgia,serif;font-size:1.05rem;font-weight:800;letter-spacing:-.01em;text-shadow:0 1px 16px rgba(3,9,16,.95),0 0 30px rgba(3,9,16,.7)}.site-mark{width:2.1rem;height:2.1rem;border:1px solid var(--line-strong);border-radius:50%;background:#ffffff14;box-shadow:0 0 26px #61f2ff52,inset 0 0 12px #70ff9e33;object-fit:cover}.nav-links{display:flex;gap:1.5rem;color:var(--ink-muted);font-family:IBM Plex Mono,monospace;font-size:.84rem;letter-spacing:.04em;text-transform:uppercase;text-shadow:0 1px 16px rgba(3,9,16,.95),0 0 30px rgba(3,9,16,.7)}.nav-links a{position:relative;transition:color .18s ease,text-shadow .18s ease}.nav-links a[aria-current=page]{color:var(--green)}.nav-links a[aria-current=page]:after{position:absolute;right:0;bottom:-.5rem;left:0;height:2px;border-radius:2px;background:linear-gradient(90deg,var(--green),var(--cyan));box-shadow:0 0 12px #70ff9e99;content:""}.nav-links a:hover,.nav-links a:focus-visible{color:var(--green);text-shadow:0 0 18px rgba(112,255,158,.55),0 1px 16px rgba(3,9,16,.9)}main{position:relative;z-index:1;width:100%;margin:0 auto}.page-section{position:relative;isolation:isolate;width:min(var(--page),calc(100% - 2rem));margin:0 auto;padding:7rem 0}.page-section:before{position:absolute;inset:1rem -8vw auto;z-index:-1;height:30rem;background:radial-gradient(50% 70% at 24% 28%,rgba(112,255,158,.13),transparent 70%),radial-gradient(52% 72% at 68% 36%,rgba(84,137,255,.12),transparent 72%);content:"";filter:blur(48px);opacity:.9;pointer-events:none}.hero{position:relative;isolation:isolate;display:grid;align-content:center;width:min(var(--page),calc(100% - 2rem));min-height:calc(100vh - 68px);margin:0 auto;padding:7rem 0 9rem}.hero:before{position:absolute;inset:-4rem -12vw auto -6vw;z-index:-1;height:34rem;background:radial-gradient(58% 80% at 72% 32%,rgba(112,255,158,.22),transparent 70%),radial-gradient(56% 76% at 48% 28%,rgba(97,242,255,.17),transparent 72%),radial-gradient(52% 72% at 28% 44%,rgba(181,114,255,.18),transparent 72%);content:"";filter:blur(52px);opacity:.85;pointer-events:none}.hero-content{position:relative;z-index:1;max-width:880px}.hero-content>*{animation:hero-rise .82s cubic-bezier(.2,.7,.2,1) both}.hero-name{animation-delay:.12s}.hero-blurb{animation-delay:.32s}.hero-meta{animation-delay:.44s}.hero-actions{animation-delay:.56s}.hero h1.hero-name{font-size:clamp(3.4rem,13vw,9.5rem);line-height:.84;letter-spacing:-.045em;text-shadow:none}.hero-line{display:block;background:linear-gradient(100deg,#c7ffe0 0%,var(--green) 20%,var(--cyan) 44%,#9fd0ff 60%,var(--violet) 80%,#ecd8ff 100%);background-size:220% 100%;background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;filter:drop-shadow(0 0 42px rgba(97,242,255,.22)) drop-shadow(0 0 90px rgba(112,255,158,.14));animation:name-shimmer 14s ease-in-out infinite alternate}.hero-line:nth-child(2){margin-left:.06em;animation-delay:-7s}.hero-blurb .hl-ai{color:var(--cyan)}.hero-blurb .hl-peng{color:var(--green)}.hero-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.9rem;margin-top:1.9rem;color:var(--ink-soft);font-family:IBM Plex Mono,monospace;font-size:.78rem;letter-spacing:.04em;text-transform:uppercase}.meta-sep{width:4px;height:4px;border-radius:50%;background:var(--ink-soft);opacity:.5}.meta-status{display:inline-flex;align-items:center;color:var(--ink-muted)}.status-dot{width:7px;height:7px;margin-right:.5rem;border-radius:50%;background:var(--green);box-shadow:0 0 10px var(--green);animation:pulse 2.4s ease-in-out infinite}.hero-actions{display:flex;flex-wrap:wrap;gap:.9rem;margin-top:2.1rem}.btn-primary,.btn-ghost{display:inline-flex;align-items:center;gap:.5rem;border-radius:999px;padding:.82rem 1.45rem;font-family:IBM Plex Mono,monospace;font-size:.82rem;font-weight:600;letter-spacing:.02em;text-transform:uppercase;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease,color .18s ease}.btn-primary{color:var(--night-deep);background:linear-gradient(100deg,var(--green),var(--cyan));box-shadow:0 0 0 1px #70ff9e66,0 14px 40px #70ff9e2e}.btn-primary:hover,.btn-primary:focus-visible{transform:translateY(-2px);box-shadow:0 0 0 1px #70ff9ea6,0 18px 52px #70ff9e52}.btn-ghost{color:var(--ink);border:1px solid var(--line-strong);background:#ffffff08}.btn-ghost:hover,.btn-ghost:focus-visible{transform:translateY(-2px);border-color:var(--green);color:var(--green)}.btn-icon{width:1.05rem;height:1.05rem;flex:none}.hero-scroll{position:absolute;bottom:2.2rem;left:0;z-index:1;display:inline-flex;align-items:center;gap:.85rem;color:var(--ink-soft);font-family:IBM Plex Mono,monospace;font-size:.74rem;letter-spacing:.14em;text-transform:uppercase;transition:color .18s ease}.hero-scroll:hover,.hero-scroll:focus-visible{color:var(--green)}.scroll-line{position:relative;width:58px;height:1px;background:var(--line-strong);overflow:hidden}.scroll-line:after{position:absolute;inset:0;width:42%;background:var(--green);box-shadow:0 0 8px var(--green);content:"";animation:scroll-sweep 2.2s ease-in-out infinite}.kicker,.project-label{margin:0 0 1rem;color:var(--green);font-family:IBM Plex Mono,monospace;font-size:.8rem;font-weight:600;letter-spacing:0;text-transform:uppercase}.hero h1,.page-title{margin:0;color:var(--ink);font-family:Fraunces,Georgia,serif;font-size:6rem;font-weight:900;letter-spacing:-.025em;line-height:.92;text-wrap:balance;text-shadow:0 0 48px rgba(97,242,255,.18),0 0 90px rgba(112,255,158,.12)}.blurb{max-width:620px;margin:1.5rem 0 0;color:var(--ink-muted);font-size:1.35rem;line-height:1.55}.section-heading{margin:0 0 1.5rem;color:var(--ink);font-family:Fraunces,Georgia,serif;font-size:3.8rem;font-weight:900;letter-spacing:-.02em;line-height:1}.project-rows{display:flex;flex-direction:column}.project-row{position:relative;display:grid;grid-template-columns:3.4rem minmax(0,1fr);gap:1.5rem;align-items:start;padding:2.4rem 1.25rem 2.4rem .75rem;border-top:1px solid var(--line);isolation:isolate;transition:padding-left .24s ease}.project-row:last-child{border-bottom:1px solid var(--line)}.project-row:before{position:absolute;inset:0;z-index:-1;background:linear-gradient(90deg,rgba(112,255,158,.09),rgba(97,242,255,.05) 38%,transparent 68%);content:"";opacity:0;transition:opacity .24s ease}.project-row:hover:before,.project-row:focus-within:before{opacity:1}.project-row:hover,.project-row:focus-within{padding-left:1.6rem}.row-logo{display:grid;place-items:center;width:3.4rem;height:3.4rem;border:1px solid var(--line-strong);border-radius:12px;background:linear-gradient(150deg,#142330d9,#080f19bf);box-shadow:inset 0 0 18px #61f2ff14;color:var(--green);font-family:Fraunces,Georgia,serif;font-size:1.5rem;font-weight:800;line-height:1;overflow:hidden;transition:border-color .24s ease,box-shadow .24s ease}img.row-logo{padding:.35rem;object-fit:contain}.row-logo img{width:100%;height:100%;object-fit:contain}.project-row:hover .row-logo,.project-row:focus-within .row-logo{border-color:#70ff9e80;box-shadow:inset 0 0 18px #70ff9e1f,0 0 22px #70ff9e1a}.row-kind{display:inline-block;margin:0 0 .55rem;color:var(--cyan);font-family:IBM Plex Mono,monospace;font-size:.74rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase}.row-title{margin:0;font-family:Fraunces,Georgia,serif;font-size:2.3rem;font-weight:800;letter-spacing:-.015em;line-height:1.04}.row-link{color:var(--ink);transition:color .2s ease}.project-row:hover .row-link,.row-link:focus-visible{color:var(--green)}.row-arrow{display:inline-block;margin-left:.5rem;color:var(--green);font-size:.62em;opacity:0;transform:translate(-5px,5px);transition:opacity .2s ease,transform .2s ease}.project-row:hover .row-arrow,.row-link:focus-visible .row-arrow{opacity:1;transform:translate(0)}.row-desc{max-width:62ch;margin:.9rem 0 0;color:var(--ink-muted);font-size:1.02rem;line-height:1.6}.link-row a:hover,.link-row a:focus-visible,.back-link:hover,.back-link:focus-visible{text-decoration:underline;text-underline-offset:.3em}.project-tags{display:flex;flex-wrap:wrap;gap:.45rem;list-style:none;margin:1.3rem 0 0;padding:0}.project-tags li{border:1px solid rgba(112,255,158,.24);border-radius:999px;background:#70ff9e0d;color:var(--ink-muted);font-family:IBM Plex Mono,monospace;font-size:.72rem;letter-spacing:.02em;line-height:1;padding:.4rem .72rem;white-space:nowrap}.detail-tags{margin-top:2rem}.link-row{display:flex;flex-wrap:wrap;gap:1rem;margin-top:1.5rem}.link-row a,.back-link{color:var(--green);font-family:IBM Plex Mono,monospace;font-size:.9rem;font-weight:700}.back-link{display:inline-block;margin-bottom:2rem}.prose{max-width:760px;margin-top:2rem}.prose p{margin:0 0 1.25rem;color:var(--ink-muted);font-size:1.08rem;line-height:1.65}.project-detail{min-height:calc(100vh - 58px)}.detail-header{max-width:860px}.detail-body{display:grid;grid-template-columns:minmax(0,760px) minmax(12rem,1fr);gap:3rem;align-items:start;margin-top:2.8rem}.detail-aside{position:sticky;top:7rem;border-left:1px solid var(--line);padding-left:1.25rem}.detail-aside p{margin:0 0 .75rem;color:var(--ink-soft);font-family:IBM Plex Mono,monospace;font-size:.82rem;line-height:1.5;text-transform:uppercase}.project-embed{width:100%;min-height:420px;margin-top:2rem;border:1px solid var(--line);border-radius:var(--radius);background:#ffffff0f}.text-page{min-height:calc(100vh - 58px)}.about-layout{display:grid;grid-template-columns:minmax(18rem,.8fr) minmax(0,1.2fr);gap:3rem;align-items:start;margin-top:2.6rem}.about-photo{position:relative;margin:0;animation:reveal-up .74s ease-out both}.about-photo:before{position:absolute;inset:-1px;z-index:-1;border-radius:var(--radius);background:linear-gradient(135deg,var(--green),var(--cyan),var(--violet));content:"";filter:blur(18px);opacity:.42}.about-photo img{display:block;width:100%;aspect-ratio:4 / 5;border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow);object-fit:cover;object-position:50% 38%}.about-photo figcaption{margin-top:.7rem;color:var(--ink-soft);font-family:IBM Plex Mono,monospace;font-size:.8rem}.about-side{display:grid;gap:1.7rem}.about-facts{display:grid;gap:1rem;margin:0}.about-facts>div{display:grid;gap:.25rem;border-left:1px solid var(--line);padding-left:.9rem}.about-facts dt{color:var(--cyan);font-family:IBM Plex Mono,monospace;font-size:.7rem;letter-spacing:.08em;text-transform:uppercase}.about-facts dd{margin:0;color:var(--ink-muted);font-size:.95rem;line-height:1.45}.site-footer{position:relative;z-index:1;margin-top:6rem;padding:2.4rem 1rem 3rem;text-align:center}.footer-line{margin:0;color:var(--ink-soft);font-family:IBM Plex Mono,monospace;font-size:.85rem;letter-spacing:.02em}.footer-line a{color:var(--green);transition:color .18s ease}.footer-line a:hover,.footer-line a:focus-visible{color:var(--cyan)}.reveal-ready [data-reveal]{opacity:0;transform:translateY(24px)}.reveal-ready [data-reveal].in-view{opacity:1;transform:translateY(0);transition:opacity .72s cubic-bezier(.2,.65,.3,1),transform .72s cubic-bezier(.2,.65,.3,1);transition-delay:calc(var(--card-index, 0) * 80ms)}@keyframes aurora-drift{0%{background-position:0% 0%,100% 0%;transform:skew(-8deg) translate3d(-2vw,0,0)}to{background-position:32% 0%,68% 0%;transform:skew(-4deg) translate3d(3vw,1.5vh,0)}}@keyframes twinkle{0%{opacity:.58}to{opacity:.95}}@keyframes reveal-up{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}@keyframes hero-rise{0%{opacity:0;transform:translateY(28px)}to{opacity:1;transform:translateY(0)}}@keyframes name-shimmer{0%{background-position:0% 50%}to{background-position:100% 50%}}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.78)}}@keyframes scroll-sweep{0%{transform:translate(-100%)}to{transform:translate(240%)}}@media(max-width:920px){.hero h1,.page-title{font-size:4.2rem}.section-heading{font-size:2.9rem}.about-layout,.detail-body{grid-template-columns:1fr}.detail-aside{position:static;border-left:0;border-top:1px solid var(--line);padding:1.25rem 0 0}}@media(max-width:700px){.site-nav{align-items:center;padding:.8rem 1rem}.site-name span{display:none}.nav-links{gap:.85rem;font-size:.75rem}.hero{min-height:calc(100vh - 58px);padding:5rem 0 6rem}.hero-scroll{bottom:1.4rem}.hero-meta{font-size:.72rem;gap:.7rem}.hero h1,.page-title{font-size:3.1rem;line-height:1}.blurb{font-size:1.08rem}.section-heading{font-size:2.4rem}.page-section{padding:5rem 0}.project-row{grid-template-columns:2.6rem minmax(0,1fr);gap:1rem;padding:2rem .5rem}.project-row:hover,.project-row:focus-within{padding-left:.9rem}.row-logo{width:2.6rem;height:2.6rem;font-size:1.2rem;border-radius:10px}.row-title{font-size:1.85rem}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:1ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:1ms!important}}
