@font-face{font-family:NanumGothic;src:url(/fonts/NanumGothic.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:NanumGothic;src:url(/fonts/NanumGothicBold.ttf) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:NanumGothic;src:url(/fonts/NanumGothicLight.ttf) format("truetype");font-weight:300;font-style:normal}html{--primary-background-color:#222;--primary-text-color:#fff;--primary-highlight-color:#2e2e2e;padding:0;margin:0}body{background-color:var(--primary-background-color);transition:background .1s ease-in,color .1s ease-in;font-size:120%;font-family:NanumGothic,sans-serif}a,body{color:var(--primary-text-color)}a{text-decoration:none}p{letter-spacing:.02em;line-height:1.7}.mid-section-home{text-align:center;display:flex;flex-direction:column;justify-content:center;align-content:center;width:100%;min-height:88vh;min-height:88dvh;margin:auto;font-size:1.5rem}@media(max-width:480px){.mid-section-home span{display:none}}.mid-section-home h1{font-size:3rem;white-space:nowrap;font-weight:600}.sub-heading{width:80%;margin:0 auto;display:flex}@media(max-width:480px){.sub-heading{width:60%;min-width:300px}}.summary-about-me{width:auto;text-align:right;padding-right:20px}.nav-link ul{-webkit-padding-start:0;padding-inline-start:0}.nav-link li{display:block;text-align:left;margin:10px 0;line-height:1.4}.nav-link li a{text-decoration:none;color:var(--primary-text-color)}.nav-link li a:hover{border-bottom:2px solid var(--primary-text-color);color:var(--primary-text-color)}.nav-link{border-left:2px solid var(--primary-text-color);width:auto;padding-left:20px}@media(max-width:480px){.nav-link li{display:block;margin-left:10px}}.nav-link,.summary-about-me{flex:1 1}.mid-section-cover{width:60%;margin:50px auto 0}@media(max-width:768px){.mid-section-cover{width:70%}}@media(max-width:480px){.mid-section-cover{width:95%}}.mid-section-cover nav{display:flex;flex-direction:row;justify-content:space-between;flex-wrap:wrap;border-bottom:2px solid var(--primary-text-color)}.mid-section-cover nav h1{font-size:40px;flex-grow:2;text-align:left;margin:10px}.mid-section-cover nav ul{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-end;align-items:center;flex-grow:5;-webkit-padding-start:0;padding-inline-start:0}.mid-section-cover nav ul li{padding:0 20px;list-style-type:none}.mid-section-cover nav ul li a{text-decoration:none;color:var(--primary-text-color)}.mid-section-cover nav ul li a:hover{border-bottom:2px solid var(--primary-text-color);color:var(--primary-text-color)}@media(max-width:480px){.mid-section-cover nav ul li{text-align:center;padding:0 10px}}@media(max-width:768px){.mid-section-cover nav{flex-direction:column;justify-content:center;align-items:center}.mid-section-cover nav ul{justify-content:center}.mid-section-cover nav h1{text-align:center}}.mid-section-cover .sub-mid-section-cover{width:100%;margin:0 auto;overflow:hidden}.mid-section-cover .sub-mid-section-cover img{max-width:100%}#themeSelector,.mid-section-cover .sub-mid-section-cover a{color:var(--primary-text-color)}#themeSelector{background:var(--primary-background-color);border:1px solid var(--primary-highlight-color);border-radius:4px;font-size:.72em;padding:4px 8px;cursor:pointer;font-family:Fira Code,monospace}.mid-section-cover #themeSelector,.mid-section-home #themeSelector{position:fixed;top:5px;right:5px;border:0}.blogPage-categoryList ul{list-style-type:none;display:flex;flex-wrap:wrap;padding-left:0;gap:0 4px}.blogPage-categoryList ul li{margin:4px 6px}.blogPage-categoryList ul li:first-child{margin-left:0}.blogPage-categoryList ul a{font-size:.88rem;opacity:.75}.blogPage-categoryList ul a:hover{opacity:1}.blogPage-categoryList{margin-bottom:32px}.blog-list{list-style:none;padding-left:0;margin:0}.blog-list li{margin-bottom:36px;padding-bottom:36px;border-bottom:1px solid var(--primary-highlight-color)}.blog-list li:last-child{border-bottom:none}.blog-list-header{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;margin-bottom:8px}.blog-heading{font-size:1.15rem;font-weight:800;line-height:1.4;border-bottom:none!important}.blog-heading:hover{border-bottom:2px solid var(--primary-text-color)!important}.date{font-size:.75rem;opacity:.45;font-family:Fira Code,monospace;white-space:nowrap}.blog-cats{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}.blog-cat-tag{font-size:.7rem;font-family:Fira Code,monospace;background:var(--primary-highlight-color);padding:2px 8px;border-radius:4px;border-bottom:none!important;opacity:.7}.blog-cat-tag:hover{opacity:1;border-bottom:none!important}.excerpt{font-size:.88rem;opacity:.6;line-height:1.7;margin:0}.pagination{list-style:none;padding:0;display:flex;gap:24px;font-size:.88rem;opacity:.65}.pagination a:hover{opacity:1}.site-nav{display:flex;align-items:center;justify-content:space-between;padding:14px 5%;border-bottom:1px solid var(--primary-highlight-color);position:-webkit-sticky;position:sticky;top:0;background:var(--primary-background-color);z-index:50}.site-nav a,.site-nav a:hover{border-bottom:none!important}.site-nav a:hover{opacity:.7}.nav-brand{font-size:1.1em;font-weight:800}.page-wrap{width:90%;max-width:860px;margin:40px auto 100px}.dir-title{font-size:clamp(1.5rem,5vw,1.9rem);font-weight:800;margin:0 0 28px;border-bottom:2px solid var(--primary-text-color);padding-bottom:10px;letter-spacing:-.01em}.breadcrumb{font-family:Fira Code,monospace;font-size:.78em;opacity:.5;margin-bottom:28px;display:flex;flex-wrap:wrap;gap:4px}.breadcrumb a{border-bottom:none!important}.breadcrumb a:hover{border-bottom:1px solid var(--primary-text-color)!important;opacity:1}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));grid-gap:12px;gap:12px;width:100%;margin:0 0 32px}.proj-card{display:flex;flex-direction:column;gap:10px;padding:22px 18px;background:var(--primary-highlight-color);border:1px solid transparent;border-radius:6px;transition:border-color .15s,transform .15s;border-bottom:none!important;min-height:90px;cursor:pointer}.proj-card:hover{border-color:var(--primary-text-color)!important;transform:translateY(-2px)}.card-name{font-weight:800;font-size:1rem;line-height:1.3}.card-meta{font-size:.72em;opacity:.4;font-family:Fira Code,monospace;margin-top:auto}.doc-list{list-style:none;padding:0;margin:0}.doc-list li{border-bottom:1px solid var(--primary-highlight-color)}.doc-list li a{display:block;padding:18px 4px;border-bottom:none!important;opacity:.85;font-size:1.05rem;transition:opacity .1s,padding-left .1s}.doc-list li a:hover{opacity:1;padding-left:12px;border-bottom:none!important}.page-wrap h2{border-bottom:1px solid var(--primary-highlight-color);padding-bottom:8px}.page-wrap blockquote{border-left:3px solid var(--primary-text-color);margin:24px 0;padding:8px 20px;opacity:.7;font-style:italic}.page-wrap table{width:100%;border-collapse:collapse;margin:24px 0;font-size:.9em;display:block;overflow-x:auto}.page-wrap table th{border-bottom:2px solid var(--primary-text-color);padding:10px 14px;text-align:left;font-weight:700}.page-wrap table td{border-bottom:1px solid var(--primary-highlight-color);padding:10px 14px}.page-wrap img{max-width:100%;border-radius:4px;display:block;margin:16px 0}.page-wrap hr{border:none;border-top:1px solid var(--primary-highlight-color);margin:40px 0}@media(max-width:480px){.card-grid{grid-template-columns:1fr 1fr}.page-wrap{width:92%;margin-top:28px}.site-nav{padding:14px 4%}}.page-wrap div.highlight,.sub-mid-section-cover div.highlight{position:relative;background:#1e1e1e;border:1px solid #3c3c3c;border-radius:6px;margin:16px 0;overflow:hidden}.page-wrap div.highlight .code-header,.sub-mid-section-cover div.highlight .code-header{display:flex;align-items:center;background:#252526;padding:5px 10px;border-bottom:1px solid #3c3c3c;min-height:30px}.page-wrap div.highlight .copy-btn,.sub-mid-section-cover div.highlight .copy-btn{background:transparent;border:1px solid #555;color:#ccc;font-size:11px;padding:2px 8px;border-radius:3px;cursor:pointer;font-family:Fira Code,monospace;transition:background .15s,color .15s,border-color .15s}.page-wrap div.highlight .copy-btn:hover,.sub-mid-section-cover div.highlight .copy-btn:hover{background:#3c3c3c}.page-wrap div.highlight .copy-btn.copied,.sub-mid-section-cover div.highlight .copy-btn.copied{color:#4ec9b0;border-color:#4ec9b0}.page-wrap div.highlight pre,.sub-mid-section-cover div.highlight pre{margin:0;padding:14px 16px;overflow-x:auto;background:transparent!important}.page-wrap div.highlight pre code,.sub-mid-section-cover div.highlight pre code{font-family:Fira Code,monospace;font-size:.82em;background:transparent!important}.page-wrap div.highlight pre code span,.sub-mid-section-cover div.highlight pre code span{font-family:Fira Code,monospace}.page-wrap li code,.page-wrap p code,.sub-mid-section-cover li code,.sub-mid-section-cover p code{background:var(--primary-highlight-color);padding:1px 5px;border-radius:3px;font-family:Fira Code,monospace;font-size:.88em}.auth-layout{display:flex;align-items:flex-start;width:80%;margin:0 auto}@media(max-width:480px){.auth-layout{width:70%;min-width:260px}}.auth-left{flex:1 1;text-align:right;padding-right:20px;line-height:1.7;white-space:nowrap}@media(max-width:480px){.auth-left{display:none}}.auth-right{flex:1 1;border-left:2px solid var(--primary-text-color);padding-left:20px;text-align:left}@media(max-width:480px){.auth-right{flex:unset;border-left:none;padding-left:0;width:100%;text-align:center}}.auth-right .auth-form .auth-field{display:block;margin:10px 0;line-height:1.4}.auth-right .auth-form .auth-field input{background:var(--primary-highlight-color);color:var(--primary-text-color);font-family:NanumGothic,sans-serif;font-size:inherit;line-height:1.4;padding:0 8px;border:none;outline:none;box-shadow:inset 2px 0 0 transparent;transition:box-shadow .15s}.auth-right .auth-form .auth-field input::placeholder{color:var(--primary-text-color);opacity:.4}.auth-right .auth-form .auth-field input:focus{box-shadow:inset 2px 0 0 var(--primary-text-color)}.auth-right .auth-form .auth-submit{display:block;background:none;border:none;color:var(--primary-text-color);font-family:NanumGothic,sans-serif;font-size:inherit;line-height:1.4;text-align:left;cursor:pointer;padding:0;margin:10px 0}.auth-right .auth-form .auth-submit:hover{border-bottom:2px solid var(--primary-text-color)}.auth-right .auth-form .auth-submit:disabled{opacity:.3;cursor:not-allowed}.auth-right .auth-form .auth-secondary{display:inline-block;text-decoration:none;color:var(--primary-text-color);font-size:inherit;line-height:1.4;margin:10px 0;opacity:.38}.auth-right .auth-form .auth-secondary:hover{opacity:1;border-bottom:2px solid var(--primary-text-color)}.auth-home{display:block;text-align:center;margin-top:8px;font-size:.75em;color:var(--primary-text-color);text-decoration:none;opacity:.35}.auth-home:hover{opacity:1}.auth-message{font-size:.75em;margin-top:12px;text-align:center;line-height:1.3;min-height:1.3em;visibility:hidden}.auth-message.error{color:#e05a5a}.auth-message.success{color:#4ec9b0}.comments-section{margin-top:60px;padding-bottom:120px}.comments-section .reactions-bar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}.comments-section .reactions-bar .reaction-btn{display:inline-flex;align-items:center;gap:5px;background:var(--primary-highlight-color);border:1px solid transparent;color:var(--primary-text-color);font-size:.85em;padding:4px 10px;cursor:pointer;border-radius:20px;transition:border-color .15s,opacity .15s;opacity:.65}.comments-section .reactions-bar .reaction-btn.reacted,.comments-section .reactions-bar .reaction-btn:hover{opacity:1;border-color:var(--primary-text-color)}.comments-section .reactions-bar .reaction-btn .reaction-count{font-size:.9em;opacity:.8}.comments-section .comments-divider{border-top:1px solid var(--primary-text-color);margin-bottom:20px;opacity:.25}.comments-section .comments-header{font-size:.85em;opacity:.5;margin-bottom:24px;letter-spacing:.05em}.comments-section .comment-item{margin-bottom:24px;padding-bottom:24px;border-bottom:1px solid var(--primary-highlight-color)}.comments-section .comment-item:last-child{border-bottom:none}.comments-section .comment-item .comment-meta{display:flex;align-items:baseline;gap:12px;margin-bottom:6px}.comments-section .comment-item .comment-meta .comment-author{font-size:.9em;font-weight:700}.comments-section .comment-item .comment-meta .comment-time{font-size:.75em;opacity:.45}.comments-section .comment-item .comment-body{font-size:.9em;line-height:1.6;white-space:pre-wrap;word-break:break-word}.comments-section .comment-empty{font-size:.85em;opacity:.4;margin-bottom:24px}.comments-section .comment-form{margin-top:28px;border-top:1px solid var(--primary-highlight-color);padding-top:20px}.comments-section .comment-form textarea{display:block;width:100%;min-height:100px;background:var(--primary-highlight-color);color:var(--primary-text-color);font-family:NanumGothic,sans-serif;font-size:.9em;line-height:1.6;padding:12px 14px;border:none;outline:none;resize:vertical;box-sizing:border-box;box-shadow:inset 2px 0 0 transparent;transition:box-shadow .15s}.comments-section .comment-form textarea::placeholder{color:var(--primary-text-color);opacity:.35}.comments-section .comment-form textarea:focus{box-shadow:inset 2px 0 0 var(--primary-text-color)}.comments-section .comment-form .comment-form-footer{display:flex;justify-content:space-between;align-items:center;margin-top:10px}.comments-section .comment-form .comment-form-footer .comment-author-label{font-size:.78em;opacity:.45}.comments-section .comment-form .comment-form-footer .comment-author-label:before{content:"writing as  "}.comments-section .comment-form .comment-form-footer .comment-submit{background:none;border:none;color:var(--primary-text-color);font-family:NanumGothic,sans-serif;font-size:.88em;cursor:pointer;padding:0}.comments-section .comment-form .comment-form-footer .comment-submit:hover{border-bottom:1px solid var(--primary-text-color)}.comments-section .comment-form .comment-form-footer .comment-submit:disabled{opacity:.3;cursor:not-allowed}.comments-section .comment-login-prompt{margin-top:20px;border-top:1px solid var(--primary-highlight-color);padding-top:16px;font-size:.85em;opacity:.5}.comments-section .comment-login-prompt a{color:var(--primary-text-color)}.comments-section .comment-login-prompt a:hover{opacity:.8}