:root{--accent:#c8ff45;--point:#ff6b3d;--ink:#11120f;--paper:#f3f2ea;--text:#2b2c27;--muted:#5a5b54;--surface:#fff9;--chip:#11120f12;--line:#11120f24;--dark-text:#c9c8bf;--dark-muted:#a3a299;--font-display:"Manrope", "IBM Plex Sans KR", sans-serif;--font-body:"IBM Plex Sans KR", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--max:1360px;--pad:clamp(1.25rem, 5.5vw, 5rem);--section:clamp(4.5rem, 8vw, 7rem);--header:4.75rem;color:var(--ink);background:var(--paper);font-family:var(--font-body);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:var(--header)}body{background:var(--paper);min-width:320px;margin:0;overflow-x:hidden}body.menu-open{overflow:hidden}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit}img{max-width:100%;display:block}ul,dl,dd,figure{margin:0;padding:0}ul{list-style:none}p,h1,h2,h3{margin:0}p{word-break:keep-all;overflow-wrap:anywhere}mark{background:var(--accent);color:inherit;padding:0 .3em}::selection{background:var(--ink);color:var(--accent)}:focus-visible{outline:3px solid var(--point);outline-offset:3px;border-radius:4px}.app-shell{overflow:clip}.container{max-width:var(--max);padding-left:var(--pad);padding-right:var(--pad);margin:0 auto}.section{padding-top:var(--section);padding-bottom:var(--section)}.muted{color:var(--muted)}.dot{color:var(--point)}.skip-link{z-index:100;background:var(--ink);color:var(--paper);border-radius:999px;padding:.75rem 1rem;transition:top .2s;position:fixed;top:-4rem;left:1rem}.skip-link:focus{top:1rem}.icon{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:.9em;height:.9em}.btn{border:1px solid var(--ink);white-space:nowrap;cursor:pointer;border-radius:999px;justify-content:center;align-items:center;gap:.6rem;min-height:2.875rem;padding:0 1.3rem;font-size:.95rem;font-weight:600;transition:background .2s,color .2s,transform .2s;display:inline-flex}.btn-solid{background:var(--ink);color:var(--paper)}.btn-solid:hover{background:#2f302b}.btn-outline{background:0 0}.btn-outline:hover{background:var(--ink);color:var(--paper)}.btn-sm{min-height:2.75rem;padding:0 1.1rem;font-size:.875rem}.btn-lg{min-height:3.5rem;padding:0 1.75rem;font-size:1rem}.btn .icon{transition:transform .2s}.btn:hover .icon{transform:translate(2px,-2px)}.site-header{z-index:50;height:var(--header);padding:0 var(--pad);border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#f3f2eaeb;justify-content:space-between;align-items:center;gap:1rem;transition:background .3s,border-color .3s;display:flex;position:fixed;inset:0 0 auto}.site-header.scrolled,body.menu-open .site-header{border-color:var(--line);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#f3f2eae6}.brand{font:800 1.2rem var(--font-display);letter-spacing:-.04em;align-items:center;gap:.5rem;display:flex}.brand i{background:var(--point);border-radius:50%;width:.55rem;height:.55rem}.main-nav{gap:.25rem;font-size:.95rem;font-weight:500;display:flex}.main-nav a{border-radius:999px;padding:.75rem 1rem;transition:background .2s}.main-nav a:hover{background:var(--chip)}.header-actions{align-items:center;gap:.5rem;display:flex}.menu-button{border:1px solid var(--ink);cursor:pointer;background:0 0;border-radius:50%;place-content:center;gap:.35rem;width:2.75rem;height:2.75rem;display:none}.menu-button span{background:currentColor;width:1rem;height:1.5px;transition:transform .3s;display:block}.menu-button.active span:first-child{transform:translateY(3px)rotate(45deg)}.menu-button.active span:last-child{transform:translateY(-3px)rotate(-45deg)}.menu-layer{z-index:49;padding:calc(var(--header) + 1.5rem) var(--pad) 2rem;background:var(--accent);visibility:hidden;clip-path:inset(0 0 100%);flex-direction:column;justify-content:space-between;transition:clip-path .55s cubic-bezier(.77,0,.18,1),visibility .55s;display:flex;position:fixed;inset:0}.menu-layer.open{visibility:visible;clip-path:inset(0)}.menu-links{border-top:1px solid var(--ink)}.menu-links a{border-bottom:1px solid var(--ink);align-items:baseline;gap:1rem;padding:1rem 0;display:flex}.menu-links small{font:600 .75rem var(--font-mono)}.menu-links span{font:700 clamp(2.2rem, 10vw, 3.5rem)/1 var(--font-display);letter-spacing:-.05em}.menu-socials{gap:1.25rem;font-weight:600;display:flex}.hero{padding-top:calc(var(--header) + clamp(2.5rem, 5vw, 4.5rem));grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);align-items:start;gap:clamp(2rem,4vw,4rem);padding-bottom:clamp(3rem,5vw,4rem);display:grid}.hero-main{flex-direction:column;justify-content:space-between;gap:2.5rem;display:flex}.hero-copy{flex-direction:column;gap:1.5rem;min-width:0;display:flex}.hero-kicker{font:600 .8rem var(--font-mono);letter-spacing:.06em;flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.chip-accent{background:var(--accent);border-radius:999px;align-items:center;gap:.5rem;padding:.5rem .9rem;display:inline-flex}.chip-accent i{background:#1f7a12;border-radius:50%;width:.5rem;height:.5rem;box-shadow:0 0 0 .2rem #1f7a122e}.hero h1{font:800 clamp(3.5rem, 6.5vw, 5.9rem)/.96 var(--font-display);letter-spacing:-.065em}.hero h1>span{white-space:nowrap;display:block}.hero h1{word-spacing:.06em}.hero-title-outline{color:#0000;-webkit-text-stroke:1.5px var(--ink)}.hero-tagline{font:600 clamp(.72rem, 1vw, .85rem)/1.5 var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);align-items:center;gap:.85rem;display:flex}.hero-tagline:before{content:"";background:var(--point);flex:none;width:2.75rem;height:2px}.hero-lead{letter-spacing:-.02em;max-width:39rem;color:var(--text);font-size:clamp(1.05rem,1.6vw,1.375rem);line-height:1.6}.hero-lead strong{color:var(--ink)}.hero-education{color:var(--muted);margin-top:-.75rem;font-size:.85rem;line-height:1.6}.hero-actions{flex-wrap:wrap;gap:.75rem;display:flex}.stats{border-top:1px solid var(--ink);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.stats div{padding:1.25rem 1.25rem 0}.stats div:first-child{padding-left:0}.stats div+div{border-left:1px solid var(--line)}.stats dt{font:600 .65rem/1.5 var(--font-mono);letter-spacing:.04em;color:var(--muted)}.stats dd{font:800 clamp(1.75rem, 2.8vw, 2.5rem) var(--font-display);letter-spacing:-.05em;margin-top:.5rem}.stats small{color:var(--muted);font-size:.45em;font-weight:600}.portrait{aspect-ratio:.78;background:var(--accent);border:1px solid var(--line);border-radius:13rem 13rem 1.25rem 1.25rem;min-height:32rem;position:relative;overflow:hidden}.portrait img{object-fit:cover;object-position:57% center;width:100%;height:100%;position:absolute;inset:0}.portrait figcaption{background:#fbfaf5f0;border-radius:.9rem;justify-content:space-between;align-items:center;gap:.75rem;padding:1rem 1.1rem;display:flex;position:absolute;bottom:1rem;left:1rem;right:1rem}.portrait figcaption span{flex-direction:column;gap:.15rem;display:flex}.portrait figcaption strong{font-size:.95rem}.portrait figcaption small{color:var(--muted);font-size:.8rem}.portrait figcaption em{font:normal 600 .75rem var(--font-mono);border:1px solid var(--ink);border-radius:999px;padding:.35rem .65rem}.hero-enter{opacity:0;animation:.9s cubic-bezier(.22,1,.36,1) .1s forwards hero-in;transform:translateY(1.5rem)}.hero-enter.delay-1{animation-delay:.2s}.hero-enter.delay-2{animation-delay:.32s}.hero-enter.delay-3{animation-delay:.44s}.marquee{background:var(--ink);color:var(--paper);font:500 .8rem var(--font-mono);letter-spacing:.12em;white-space:nowrap;overflow:hidden}.marquee>div{width:max-content;animation:32s linear infinite marquee;display:flex}.marquee p{align-items:center;gap:2.5rem;padding:1.15rem 1.25rem;display:flex}.marquee b{color:var(--accent);font-weight:400}.section-label{font:600 .8rem var(--font-mono);letter-spacing:.06em}.section-heading{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);align-items:end;gap:1.25rem 3rem;display:grid}.section-heading .section-label{grid-column:1/-1;align-self:start}.section-heading h2,.about-title h2{font:800 clamp(3rem, 5.2vw, 4.75rem)/1 var(--font-display);letter-spacing:-.06em;overflow-wrap:anywhere}.section-heading p{color:var(--text);font-size:1.05rem;line-height:1.65}.filters{border-top:1px solid var(--ink);flex-wrap:wrap;gap:.5rem;margin:2.5rem 0;padding-top:1.5rem;display:flex}.filters button{cursor:pointer;background:0 0;border:1px solid #11120f4d;border-radius:999px;align-items:center;gap:.6rem;min-height:2.75rem;padding:0 1.25rem;font-weight:600;transition:background .2s,color .2s,border-color .2s;display:inline-flex}.filters button span{font:500 .75rem var(--font-mono);color:var(--muted)}.filters button:hover{border-color:var(--ink)}.filters button.active{background:var(--ink);border-color:var(--ink);color:var(--paper)}.filters button.active span{color:var(--accent)}.project-card{background:var(--surface);border:1px solid var(--line);border-radius:1.25rem;flex-direction:column;min-width:0;transition:box-shadow .25s,border-color .25s;display:flex;overflow:hidden}.project-card:hover{border-color:#11120f59;box-shadow:0 12px 32px #11120f0f}.project-card.featured{grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);margin-bottom:1.5rem;display:grid}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem;display:grid}.project-visual{background-color:var(--card-color);background-image:linear-gradient(#11120f12 1px,#0000 1px),linear-gradient(90deg,#11120f12 1px,#0000 1px);background-size:2rem 2rem;min-height:18.75rem;position:relative;overflow:hidden}.featured .project-visual{min-height:25rem}.visual-number{font:600 .8rem var(--font-mono);position:absolute;top:1.25rem;left:1.5rem}.visual-orb{aspect-ratio:1;border:2px solid var(--ink);background:var(--paper);width:8.75rem;box-shadow:.6rem .6rem 0 var(--ink);border-radius:50%;transition:transform .5s cubic-bezier(.22,1,.36,1);position:absolute;top:2.5rem;right:2.5rem}.featured .visual-orb{width:13.75rem;box-shadow:.9rem .9rem 0 var(--ink);top:3.5rem;right:3rem}.project-card:hover .visual-orb{transform:translate(-.5rem,.4rem)rotate(-8deg)}.visual-orb{place-items:center;font-family:Apple Color Emoji,Segoe UI Emoji,Noto Color Emoji,sans-serif;font-size:3.75rem;line-height:1;display:grid}.featured .visual-orb{font-size:5.5rem}.project-visual b{font:800 clamp(3rem, 5vw, 4.25rem)/.82 var(--font-display);letter-spacing:-.08em;white-space:pre-line;position:absolute;bottom:1.4rem;left:1.5rem}.featured .project-visual b{font-size:clamp(4rem,7.5vw,6.5rem);bottom:1.75rem;left:1.75rem}.project-info{flex-direction:column;flex:1;gap:.9rem;padding:1.75rem 2rem 2rem;display:flex}.featured .project-info{gap:1.15rem;padding:2.5rem}.project-meta{font:500 .7rem/1.6 var(--font-mono);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:.5rem 1rem;display:flex}.project-info h3{font:800 2.5rem/1 var(--font-display);letter-spacing:-.05em}.featured .project-info h3{font-size:clamp(2.5rem,4vw,3.5rem)}.project-info>p{color:var(--text);word-break:keep-all;overflow-wrap:anywhere;font-size:1rem;line-height:1.8}.featured .project-info>p{font-size:1.125rem}.tags{flex-wrap:wrap;gap:.5rem;display:flex}.tags li{background:var(--chip);border-radius:999px;padding:.4rem .75rem;font-size:.8rem;font-weight:500}.tags.outline li{background:0 0;border:1px solid #11120f33}.project-action{border-top:1px solid var(--line);align-items:center;min-height:3.95rem;margin-top:auto;padding-top:1.1rem;font-size:.9rem;display:flex}.about{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1.5rem 4rem;padding-top:2.5rem;display:grid}.about>.section-label{grid-column:1/-1;padding-top:.75rem}.about-title{flex-direction:column;gap:1.75rem;display:flex}.about-lead{letter-spacing:-.03em;font-size:clamp(1.5rem,2.2vw,1.875rem);font-weight:600;line-height:1.45}.about-body{flex-direction:column;align-items:flex-start;gap:2rem;padding-top:.75rem;display:flex}.about-body>p{color:var(--text);font-size:1.05rem;line-height:1.85}.facts{border-top:1px solid var(--ink);width:100%}.facts div{border-bottom:1px solid var(--line);grid-template-columns:8.75rem minmax(0,1fr);gap:1rem;padding:1.1rem 0;display:grid}.facts dt{font:500 .8rem var(--font-mono);color:var(--muted);padding-top:.15rem}.facts dd{font-weight:600}.toolbox{background:var(--ink);color:var(--paper)}.toolbox .section-label{color:var(--accent)}.toolbox .section-heading p{color:var(--dark-text)}.skill-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;margin-top:3.5rem;display:grid}.skill-card{background:#ffffff0a;border:1px solid #f3f2ea2e;border-radius:1rem;flex-direction:column;gap:1.5rem;padding:2rem;transition:border-color .3s;display:flex}.skill-card:hover{border-color:var(--accent)}.skill-card>div{justify-content:space-between;align-items:baseline;display:flex}.skill-card h3{font:800 1.75rem var(--font-display);letter-spacing:-.04em}.skill-card>div span{font:500 .8rem var(--font-mono);color:var(--dark-muted)}.skill-card ul{flex-wrap:wrap;gap:.5rem;display:flex}.skill-card li{border:1px solid #f3f2ea3d;border-radius:999px;padding:.5rem .9rem;font-size:.95rem}.learning{grid-template-columns:12.5rem minmax(0,1fr);gap:2.5rem;margin-top:4rem;display:grid}.learning>.section-label{padding-top:1.5rem}.learning-list{border-top:1px solid #f3f2ea4d}.learning-list article{border-bottom:1px solid #f3f2ea24;grid-template-columns:2rem minmax(0,1fr);align-items:baseline;gap:.65rem 1.25rem;padding:1.75rem 0;display:grid}.learning-list p{grid-column:2;max-width:40rem}.learning-list span{font:500 .8rem var(--font-mono);color:var(--dark-muted)}.learning-list h3{font:700 1.5rem var(--font-display);letter-spacing:-.03em}.learning-list p{color:var(--dark-text);line-height:1.7}.paper-list{border-top:1px solid var(--ink);margin-top:3rem}.paper-row{border-bottom:1px solid #11120f33;grid-template-columns:7rem minmax(0,1fr) auto;align-items:center;gap:2rem;padding:2.25rem 0;transition:background .25s,padding .25s;display:grid}.paper-row:hover{background:var(--surface);padding-left:1.25rem;padding-right:1.25rem}.paper-number{font:600 .8rem var(--font-mono)}.paper-body{flex-direction:column;gap:.65rem;display:flex}.paper-body h3{font:700 clamp(1.4rem, 2.3vw, 2rem)/1.15 var(--font-display);letter-spacing:-.035em}.paper-body p{color:var(--text)}.paper-body .tags{margin-top:.25rem}.records{padding-top:0}.award-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:1.5rem;margin-top:3rem;display:grid}.award-card{border:1px solid var(--line);background:var(--surface);border-radius:1.25rem;flex-direction:column;gap:.85rem;padding:1rem 1rem 1.5rem;display:flex}.award-card img{object-fit:cover;background:var(--chip);border-radius:.65rem;width:100%;height:15rem;transition:transform .4s}.award-card:last-child img{object-fit:contain}a.award-card:hover img{transform:scale(1.02)}.award-date{font:500 .75rem var(--font-mono);color:var(--muted)}.award-card h3{letter-spacing:-.03em;font-size:1.375rem;font-weight:700}.award-card p{color:var(--text);font-size:.95rem}.record-row{grid-template-columns:22.5rem minmax(0,1fr);gap:1.5rem;margin-top:3rem;display:grid}.gpa-card,.cert-card{border-radius:1rem;flex-direction:column;gap:1rem;padding:1.75rem 2rem;display:flex}.gpa-card{background:var(--accent);gap:.4rem}.gpa-card span,.cert-card>span{font:500 .75rem var(--font-mono)}.cert-card>span{color:var(--muted)}.gpa-card strong{font:800 4.5rem/1 var(--font-display);letter-spacing:-.07em}.gpa-card small{font-size:1.5rem;font-weight:600}.cert-card{border:1px solid #11120f33;justify-content:space-between}.cert-card ul{flex-wrap:wrap;gap:.6rem;display:flex}.cert-card li{background:var(--chip);border-radius:999px;padding:.65rem 1.1rem;font-weight:600}.contact{background:var(--accent);padding:var(--section) 0 2.5rem}.contact-main{grid-template-columns:minmax(0,1fr) minmax(0,27.5rem);align-items:end;gap:4rem;display:grid}.contact-main>div:first-child{flex-direction:column;gap:1.5rem;display:flex}.contact h2{font:800 clamp(3rem, 6.5vw, 6rem)/.98 var(--font-display);letter-spacing:-.065em}.contact-actions{flex-direction:column;gap:.75rem;display:flex}.contact-actions>p{margin-bottom:.5rem;font-size:1.125rem;line-height:1.6}.email-button{border:1px solid var(--ink);border-radius:999px;justify-content:space-between;align-items:center;gap:.75rem;min-height:4rem;padding:0 1.6rem;font-size:1.05rem;font-weight:600;transition:background .2s,color .2s;display:flex}.email-button span{text-overflow:ellipsis;overflow:hidden}.email-button small{font:600 .75rem var(--font-mono);opacity:.75}.email-button.primary,.email-button:hover{background:var(--ink);color:var(--paper)}.email-button.primary:hover{background:#2f302b}.contact-links{grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem;display:grid}.contact-links .btn{min-height:3.25rem}.contact-bottom{border-top:1px solid var(--ink);font:500 .8rem var(--font-mono);justify-content:space-between;gap:1rem;margin-top:4rem;padding-top:1.25rem;display:flex}[data-reveal]{opacity:0;transition:opacity .7s,transform .7s cubic-bezier(.22,1,.36,1);transform:translateY(1.5rem)}[data-reveal].is-visible{opacity:1;transform:none}@keyframes hero-in{to{opacity:1;transform:none}}@keyframes marquee{to{transform:translate(-50%)}}@media (width<=1100px){.main-nav{display:none}.menu-button{display:grid}.section-heading{grid-template-columns:minmax(0,1fr) minmax(0,20rem)}.section-heading .section-label{grid-column:1/-1}.about{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.about>.section-label{grid-column:1/-1;padding-top:0}.learning{grid-template-columns:1fr;gap:1rem}.learning>.section-label{padding-top:0}.paper-row{grid-template-columns:7rem minmax(0,1fr) auto;gap:1.5rem}.contact-main{grid-template-columns:1fr;gap:2.5rem}}@media (width<=860px){.hero{grid-template-columns:1fr}.portrait{aspect-ratio:.85;min-height:0;max-height:36rem}.project-card.featured{display:flex}.featured .project-visual{min-height:20rem}.featured .visual-orb{width:9rem;box-shadow:.6rem .6rem 0 var(--ink);top:2rem;right:2rem}.skill-grid{grid-template-columns:1fr}.learning-list article{grid-template-columns:2.5rem minmax(0,1fr);gap:.5rem 1rem}.learning-list p{grid-column:2}.award-grid{grid-template-columns:1fr 1fr}.record-row{grid-template-columns:1fr}}@media (width<=640px){:root{--pad:1.25rem;--header:4rem}.hide-mobile{display:none}.hero h1{font-size:clamp(2.9rem,13.5vw,5.3rem)}.hero-tagline{letter-spacing:.08em;gap:.65rem}.hero-tagline:before{width:2rem}.hero-actions{flex-direction:column}.hero-actions .btn{width:100%}.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.stats div{border-bottom:1px solid var(--line);padding:1rem 0 1rem 1rem}.stats div:nth-child(odd){border-left:0;padding-left:0}.stats div:nth-last-child(-n+2){border-bottom:0}.portrait{border-radius:11rem 11rem 1.1rem 1.1rem}.section-heading{grid-template-columns:1fr;gap:1.25rem}.section-heading h2,.about-title h2{font-size:clamp(2.5rem,10.8vw,3.5rem)}.filters{margin:2rem calc(var(--pad) * -1);padding-left:var(--pad);padding-right:var(--pad);scrollbar-width:none;flex-wrap:nowrap;overflow-x:auto}.filters button{flex:none}.project-grid{grid-template-columns:1fr;gap:1.25rem}.project-card.featured{margin-bottom:1.25rem}.project-visual,.featured .project-visual{min-height:10rem}.visual-orb,.featured .visual-orb{width:5.25rem;box-shadow:.45rem .45rem 0 var(--ink);font-size:2.5rem;top:1.5rem;right:1.5rem}.project-visual b,.featured .project-visual b{font-size:2.75rem;bottom:1rem;left:1rem}.project-info,.featured .project-info{gap:.7rem;padding:1.25rem 1.25rem 1.4rem}.project-info h3,.featured .project-info h3{font-size:1.85rem}.project-info>p,.featured .project-info>p{font-size:.95rem}.about{grid-template-columns:1fr;gap:1.75rem}.facts div{grid-template-columns:1fr;gap:.3rem}.paper-row{grid-template-columns:1fr;gap:1rem}.paper-row:hover{background:0 0;padding-left:0;padding-right:0}.paper-cta{justify-self:start}.award-grid{grid-template-columns:1fr}.award-card img{height:15rem}.gpa-card strong{font-size:3.75rem}.email-button{min-height:3.5rem;padding:0 1.25rem;font-size:.95rem}.contact-bottom{flex-direction:column;gap:.4rem}}@media (width>=641px) and (width<=860px){.hero h1{font-size:clamp(4rem,10vw,6rem)}}@media (forced-colors:active){.hero-title-outline{color:canvastext;-webkit-text-stroke:0}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.hero-enter,[data-reveal]{opacity:1;transform:none}}
