@charset "UTF-8";
:root{color-scheme:light;--ink:#202124;--muted:#686b72;--line:#e8e9ec;--accent:#305bd2;--soft:#f7f8fa;font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans KR","Malgun Gothic",sans-serif;font-synthesis:none}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:2rem}body{margin:0;background:#fff;color:var(--ink);font-size:1rem;line-height:1.7;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none;text-underline-offset:.25em}a:hover{color:var(--accent)}a:focus-visible{outline:2px solid var(--accent);outline-offset:5px;border-radius:2px}::selection{background:#dfe7ff}h1,h2,h3,p{margin:0}h1,h2,h3{word-break:keep-all;overflow-wrap:anywhere}h1{font-size:2.7rem;line-height:1.43;letter-spacing:-.065em;font-weight:700}h2{font-size:1.25rem;letter-spacing:-.035em}h3{font-size:1.4rem;line-height:1.5;letter-spacing:-.035em}p{word-break:keep-all;overflow-wrap:anywhere}.shell{width:min(100% - 3rem,760px);margin:auto}.site-header{height:112px;display:flex;align-items:center;justify-content:space-between;gap:1rem;border-bottom:1px solid var(--line)}.brand{font-weight:750;font-size:1.2rem;letter-spacing:-.055em;white-space:nowrap}.brand-dot,.accent{color:var(--accent)}.brand-dot{margin-left:3px}.site-header nav{display:flex;gap:1.9rem;font-size:.925rem;color:var(--muted)}.site-header nav a{padding:.5rem 0}.site-header nav a[aria-current]{color:var(--ink);text-decoration:underline;text-decoration-color:var(--accent);text-decoration-thickness:2px;text-underline-offset:10px}.skip-link{position:fixed;left:1rem;top:-5rem;padding:.6rem 1rem;background:#fff;z-index:10;border:1px solid var(--accent)}.skip-link:focus{top:1rem}main:focus{outline:none}.eyebrow{font-size:.72rem;letter-spacing:.14em;font-weight:600;color:var(--muted);line-height:1.6}.intro{padding:76px 0 72px}.intro h1{margin:21px 0 21px}.intro-copy{font-size:1.06rem;color:var(--muted);line-height:1.85;letter-spacing:-.025em}.text-link{font-size:.9rem;font-weight:550}.intro-link{display:inline-block;margin-top:23px}.section-heading{display:flex;align-items:center;justify-content:space-between;padding-bottom:18px;border-bottom:1px solid var(--ink)}.section-heading h2{font-size:1rem}.section-heading>span,.section-heading>a{font-size:.8rem;color:var(--muted)}.post-list{list-style:none;padding:0;margin:0}.post-list li{border-bottom:1px solid var(--line)}.post-link{display:block;position:relative;padding:30px 48px 29px 0;transition:color .15s}.post-meta{display:flex;gap:9px;flex-wrap:wrap;align-items:center;font-size:.79rem;color:var(--muted);line-height:1.5}.post-meta>span:first-child{color:var(--accent)}.post-link h3{margin:10px 0 8px}.post-link p{color:var(--muted);font-size:.95rem;letter-spacing:-.022em;line-height:1.75}.post-bottom{display:flex;gap:16px;color:var(--muted);font-size:.75rem;margin-top:19px;font-variant-numeric:tabular-nums}.entry-number{position:absolute;right:0;top:31px;color:#8b8e94;font:400 .78rem/1.5 ui-monospace,monospace}.portfolio-note{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;align-items:center;padding:24px 0;margin-top:37px;font-size:.9rem}.portfolio-note p{color:var(--muted)}.portfolio-note a{font-weight:550}.site-footer{margin-top:60px;border-top:1px solid var(--line);padding:27px 0 38px;display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;color:var(--muted);font-size:.78rem}.site-footer>div{display:flex;gap:21px}.page-heading{padding:69px 0 48px}.page-heading h1{margin:18px 0 16px}.page-heading>p:not(.eyebrow){font-size:1.05rem;color:var(--muted)}.page-heading .english-name{font-size:.95rem;letter-spacing:.03em}.project{display:grid;grid-template-columns:48px 1fr;gap:18px;border-top:1px solid var(--line);padding:34px 0 38px}.project-number{padding-top:4px;font:400 .8rem/1.7 ui-monospace,monospace;color:var(--muted)}.project-label{font-size:.82rem;color:var(--muted);margin-bottom:6px}.project h2{font-size:1.6rem;letter-spacing:-.04em}.project-role{font-size:.85rem;color:var(--accent);margin-top:9px}.project-description{margin-top:18px;color:#51545b;font-size:1rem;line-height:1.9}.project-tags{font-size:.78rem;color:var(--muted);margin-top:18px}.project-links{display:flex;gap:25px;flex-wrap:wrap;margin-top:20px;font-size:.9rem}.project-links a:first-child{font-weight:600}.pdf-section{border:1px solid var(--line);background:var(--soft);padding:28px;display:flex;justify-content:space-between;align-items:center;gap:24px;flex-wrap:wrap;margin-top:16px}.pdf-section h2{font-size:1.2rem;margin:8px 0}.pdf-section p{font-size:.9rem;color:var(--muted)}.status{font-size:.78rem;color:var(--muted);border:1px solid #d7d9de;border-radius:4px;padding:4px 9px;white-space:nowrap}.pdf-actions{display:flex;gap:15px;align-items:center;flex-wrap:wrap}.button{display:inline-block;background:var(--ink);color:white;border-radius:4px;padding:10px 17px;font-size:.9rem;line-height:1.65}.button:hover{background:var(--accent);color:white}.about-links{display:flex;align-items:center;gap:24px;margin:36px 0 70px}.about-copy{max-width:650px}.article-header{padding:40px 0 30px}.back-link{display:inline-block;font-size:.83rem;color:var(--muted);margin-bottom:42px}.article-header h1{font-size:2.5rem;line-height:1.45;margin:16px 0 19px;max-width:710px}.article-summary{font-size:1.08rem;color:var(--muted);line-height:1.85}.article-byline{display:flex;gap:17px;flex-wrap:wrap;font-size:.8rem;color:var(--muted);margin-top:27px}.toc{padding:23px 26px;background:var(--soft);border-left:2px solid #dce3f7;margin:8px 0 45px}.toc ol{margin:12px 0 0;padding-left:20px}.toc li{font-size:.9rem;color:#565a63;padding:3px 0}.prose{font-size:1.1rem;line-height:1.95;letter-spacing:-.022em}.prose p{margin:0 0 24px}.prose h2{font-size:1.45rem;line-height:1.55;margin:48px 0 19px;scroll-margin-top:24px}.prose h3{font-size:1.2rem;margin:30px 0 14px}.prose a{color:var(--accent);text-decoration:underline}.prose strong{font-weight:650}.prose blockquote{margin:29px 0;padding:18px 23px;border-left:3px solid var(--accent);background:var(--soft);color:#434955}.prose blockquote p{margin:0}.prose code{font: .88em/1.8 ui-monospace,"SFMono-Regular",Consolas,monospace;background:#f0f2f6;padding:.15em .35em;border-radius:3px;overflow-wrap:anywhere}.prose pre{overflow:auto;padding:1rem;background:var(--soft)}.prose pre code{padding:0}.prose table{border-collapse:collapse;width:100%;font-size:.95rem;line-height:1.8;margin:28px 0;table-layout:fixed}.prose th,.prose td{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;padding:14px 12px;overflow-wrap:anywhere;word-break:keep-all}.prose th{background:var(--soft);font-weight:600}.prose td:first-child,.prose th:first-child{width:37%}.prose hr{border:0;border-top:1px solid var(--line);margin:39px 0}.prose img{max-width:100%;height:auto}.article-end{display:flex;align-items:center;justify-content:center;flex-direction:column;margin:52px 0 57px;gap:9px}.end-mark{font-size:1.6rem;color:var(--accent)}.article-end p{font-size:.8rem;color:var(--muted)}.related ul{list-style:none;padding:0;margin:0}.related li{border-bottom:1px solid var(--line)}.related li a{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:22px 0;font-size:1rem;word-break:keep-all}.error-page{min-height:60vh}.error-page .button{margin-top:28px}
/* A short overview leads into the writing; details stay on the project page. */
.intro{padding:62px 0 50px}
.intro-actions{display:flex;align-items:center;gap:24px;margin-top:27px;flex-wrap:wrap}
.selected-work{margin-bottom:60px}
.project-index{padding:0;margin:0;list-style:none}
.project-index li{border-bottom:1px solid var(--line)}
.project-index a{display:grid;grid-template-columns:145px 1fr 18px;gap:16px;align-items:center;padding:18px 0;font-size:.9rem}
.project-index strong{font-weight:600;letter-spacing:-.025em}
.project-index a>span:nth-child(2){color:var(--muted);word-break:keep-all}
.project-index a>span:last-child{color:var(--accent)}
.project-jump{display:flex;gap:23px;flex-wrap:wrap;margin-top:25px;font-size:.85rem}
.project-jump a{text-decoration:underline;text-decoration-color:#c4cad7}
.project{scroll-margin-top:30px}
.project-details{margin:24px 0 0}
.project-details>div{margin-top:20px}
.project-details dt{font-size:.8rem;font-weight:600;margin-bottom:7px;color:var(--ink)}
.project-details dd{margin:0;font-size:.97rem;line-height:1.9;color:#51545b;word-break:keep-all;overflow-wrap:anywhere}
.project-tags{margin-top:24px}
.case-links{display:grid;gap:9px;margin-top:23px;font-size:.92rem}
.case-links a{color:var(--accent);text-decoration:underline;text-decoration-color:#c9d5f6}
.repo-link{display:inline-block;font-size:.82rem;margin-top:18px;color:var(--muted);text-decoration:underline}
.education{margin:0 0 35px;font-size:1rem;letter-spacing:0}
.education>div{border-bottom:1px solid var(--line);padding:17px 0}
.education dt{font-weight:600;margin-bottom:3px}
.education dd{margin:0;font-size:.92rem;color:var(--muted);line-height:1.85}
.academic-result{color:var(--accent)}
.flow-diagram{margin:30px 0;background:var(--soft);border:1px solid var(--line);border-radius:6px;padding:24px;letter-spacing:-.02em}
.flow-diagram figcaption{font-size:.88rem;font-weight:600;margin-bottom:20px;line-height:1.6;word-break:keep-all}
.flow-steps{list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:26px;padding:0;margin:0}
.flow-steps li{position:relative;border:1px solid #dce1ec;background:#fff;border-radius:4px;padding:15px 8px;text-align:center;line-height:1.65}
.flow-steps li+li:before{content:'→';position:absolute;left:-24px;top:50%;transform:translateY(-50%);color:var(--muted);width:20px;font-size:.95rem}
.flow-steps strong{display:block;font-size:.88rem;font-weight:600;word-break:keep-all}
.flow-steps span{display:block;font-size:.72rem;color:var(--muted);margin-top:5px;word-break:keep-all}
.prose .flow-caption{font-size:.78rem;line-height:1.8;color:var(--muted);margin:17px 0 0;text-align:center}
.input-path{display:grid;grid-template-columns:1fr 1fr 1fr;gap:24px;align-items:center;font-size:.85rem;text-align:center;line-height:1.6}
.input-path+.input-path{margin-top:16px}
.input-path strong{font-weight:600;color:var(--accent)}
.input-path span{position:relative;padding:13px 6px;border:1px solid #dce1ec;border-radius:4px;background:white;word-break:keep-all}
.input-path span:before{content:'→';position:absolute;left:-22px;top:50%;transform:translateY(-50%);color:var(--muted);width:18px}
.prose ul{padding-left:22px;margin:16px 0 24px}
.prose li{margin:8px 0;word-break:keep-all;overflow-wrap:anywhere}
.prose .flow-steps li{margin:0}
@media(min-width:1100px){.shell{width:760px}}
@media(max-width:600px){.shell{width:calc(100% - 40px)}.site-header{height:90px}.site-header nav{gap:19px;font-size:.86rem}.intro{padding:54px 0 51px}h1{font-size:2.05rem;line-height:1.5}.intro h1{margin-top:18px}.intro-copy{font-size:1rem}.eyebrow{font-size:.68rem}.post-link{padding:26px 17px 25px 0}.post-link h3{font-size:1.17rem}.post-link p{font-size:.9rem}.entry-number{display:none}.post-meta{font-size:.75rem}.post-bottom{font-size:.73rem}.portfolio-note{font-size:.85rem;margin-top:25px}.site-footer{margin-top:39px;font-size:.73rem}.site-footer>div{gap:16px}.page-heading{padding:49px 0 35px}.page-heading>p:not(.eyebrow){font-size:1rem}.project{grid-template-columns:25px 1fr;gap:12px;padding:29px 0}.project h2{font-size:1.4rem}.project-description{font-size:.97rem}.pdf-section{padding:22px}.article-header{padding-top:29px}.back-link{margin-bottom:32px}.article-header h1{font-size:1.92rem}.article-summary{font-size:1rem}.article-byline{gap:13px;font-size:.75rem}.toc{padding:20px;margin-bottom:35px}.prose{font-size:1.04rem;line-height:1.95}.prose h2{font-size:1.28rem;margin-top:39px}.prose blockquote{padding:16px 18px}.prose table{font-size:.85rem}.prose th,.prose td{padding:12px 8px}.related li a{font-size:.95rem}.about-links{gap:20px}}
@media(max-width:600px){
  .intro{padding:44px 0 40px}
  .intro-actions{gap:20px;margin-top:24px}
  .selected-work{margin-bottom:44px}
  .project-index a{grid-template-columns:1fr 18px;gap:3px 10px;padding:16px 0}
  .project-index strong{grid-column:1;font-size:.92rem}
  .project-index a>span:nth-child(2){grid-column:1;font-size:.81rem}
  .project-index a>span:last-child{grid-column:2;grid-row:1/3}
  .project-details dd{font-size:.95rem}
  .project-jump{gap:18px;font-size:.82rem}
  .flow-diagram{padding:20px 16px}
  .flow-steps{grid-template-columns:1fr;gap:25px}
  .flow-steps li{padding:12px}
  .flow-steps li+li:before{content:'↓';left:50%;top:-23px;transform:translateX(-50%)}
  .flow-steps strong{font-size:.92rem}
  .flow-steps span{font-size:.78rem;margin-top:3px}
  .input-path{grid-template-columns:1fr;gap:24px;font-size:.88rem}
  .input-path+.input-path{margin-top:25px;padding-top:20px;border-top:1px solid var(--line)}
  .input-path span:before{content:'↓';left:50%;top:-23px;transform:translateX(-50%)}
  .input-path span{padding:10px}
}
@media(max-width:360px){.site-header{height:auto;min-height:90px;flex-wrap:wrap;padding:20px 0;gap:12px}.site-header nav{gap:18px}h1{font-size:1.85rem}.article-header h1{font-size:1.75rem}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}
@media print{.shell{width:100%;max-width:none}.site-header,.site-footer,.skip-link,.toc,.related,.back-link,.article-end{display:none}.article-header{padding:0 0 20px}body{font-size:11pt}.prose{font-size:11pt}h1,.article-header h1{font-size:24pt}.prose h2{break-after:avoid}.prose p,.prose table{orphans:3;widows:3}.prose a{color:inherit}.button{background:none;color:#000}}
