:root{--text-main:#1a1a1a;--text-sub:#4a4a4a;--border:#d1d1d1;--fs-hero:clamp(1.75rem, 1.2rem + 2.75vw, 3.5rem);--fs-h2:clamp(1.5rem, 1.2rem + 1.5vw, 2.5rem);--fs-body:clamp(1rem, .9rem + .5vw, 1.25rem);--fs-author:clamp(.95rem, .85rem + .5vw, 1.15rem);--fs-small:clamp(.85rem, .8rem + .25vw, 1rem);--fs-icon:clamp(18px, 1rem + .25vw, 22px);--space-section:clamp(60px, 10vw, 100px);--space-h2-top:clamp(60px, 8vw, 100px);--space-h2-bottom:clamp(24px, 4vw, 40px);--animation-speed:1}*{box-sizing:border-box}html,body{overflow-x:hidden}body{background:#fff;color:var(--text-main);font-family:JetBrains Mono Variable,Noto Sans KR Variable,-apple-system,sans-serif;font-size:var(--fs-body);line-height:1.6;margin:0;padding:clamp(40px,8vw,80px) clamp(20px,5vw,40px);-webkit-font-smoothing:antialiased}.container{max-width:900px;margin:0 auto}.article-meta{margin:var(--space-section)0 clamp(30px,5vw,50px);padding-left:clamp(15px,2vw,20px)}.author-info{display:flex;align-items:center;gap:clamp(6px,1vw,8px);font-weight:800;font-size:var(--fs-author)}.social-icon{color:#0077b5;font-size:var(--fs-icon);display:inline-block;vertical-align:middle}.fade-up{opacity:0;transform:translateY(30px) scale(.98);transition:opacity calc(.8s/var(--animation-speed)) cubic-bezier(.16,1,.3,1),transform calc(.8s/var(--animation-speed)) cubic-bezier(.16,1,.3,1);will-change:opacity,transform}.fade-up.viz{opacity:1;transform:translateY(0) scale(1)}.reveal-wrapper{overflow:hidden;display:block}.reveal-content{display:block;transform:translateY(100%);transition:transform calc(1s/var(--animation-speed)) cubic-bezier(.16,1,.3,1);will-change:transform}.reveal-content.viz,.reveal-wrapper.viz .reveal-content,h2.viz .reveal-content{transform:translateY(0)}:root{--bprogress-color:#29d;--bprogress-height:2px;--bprogress-spinner-size:18px;--bprogress-spinner-animation-duration:.4s;--bprogress-spinner-border-size:2px;--bprogress-box-shadow:0 0 10px var(--bprogress-color), 0 0 5px var(--bprogress-color);--bprogress-z-index:99999;--bprogress-spinner-top:15px;--bprogress-spinner-bottom:auto;--bprogress-spinner-right:15px;--bprogress-spinner-left:auto}.bprogress{width:0;height:0;pointer-events:none;z-index:var(--bprogress-z-index)}.bprogress .bar{background:var(--bprogress-color);position:fixed;z-index:var(--bprogress-z-index);top:0;left:0;width:100%;height:var(--bprogress-height)}.bprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:var(--bprogress-box-shadow);opacity:1;transform:rotate(3deg) translateY(-4px)}.bprogress .spinner{display:block;position:fixed;z-index:var(--bprogress-z-index);top:var(--bprogress-spinner-top);bottom:var(--bprogress-spinner-bottom);right:var(--bprogress-spinner-right);left:var(--bprogress-spinner-left)}.bprogress .spinner-icon{width:var(--bprogress-spinner-size);height:var(--bprogress-spinner-size);box-sizing:border-box;border:solid var(--bprogress-spinner-border-size) transparent;border-top-color:var(--bprogress-color);border-left-color:var(--bprogress-color);border-radius:50%;-webkit-animation:bprogress-spinner var(--bprogress-spinner-animation-duration) linear infinite;animation:bprogress-spinner var(--bprogress-spinner-animation-duration) linear infinite}.bprogress-custom-parent{overflow:hidden;position:relative}.bprogress-custom-parent .bprogress .spinner,.bprogress-custom-parent .bprogress .bar{position:absolute}.bprogress .indeterminate{position:fixed;top:0;left:0;width:100%;height:var(--bprogress-height);overflow:hidden}.bprogress .indeterminate .inc,.bprogress .indeterminate .dec{position:absolute;top:0;height:100%;background-color:var(--bprogress-color)}.bprogress .indeterminate .inc{animation:bprogress-indeterminate-increase 2s infinite}.bprogress .indeterminate .dec{animation:bprogress-indeterminate-decrease 2s .5s infinite}@-webkit-keyframes bprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes bprogress-spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes bprogress-indeterminate-increase{0%{left:-5%;width:5%}to{left:130%;width:100%}}@keyframes bprogress-indeterminate-decrease{0%{left:-80%;width:80%}to{left:110%;width:10%}}