@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=IBM+Plex+Sans+KR:wght@400;500;600;700&display=swap');
:root{--paper:#fcfdfd;--surface:#f5f9fb;--ink:#192e3b;--muted:#5a6e7a;--line:#dce7ed;--ice:#c7eefa;--ice-deep:#8ad6f1;--blue:#14678f;--white:#fff;--max:1090px}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:'DM Sans','IBM Plex Sans KR',sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}a:hover{color:var(--blue)}button{font:inherit}img{max-width:100%}::selection{background:var(--ice)}.wrap{width:min(calc(100% - 48px),var(--max));margin-inline:auto}.site-header{border-bottom:1px solid var(--line);position:sticky;top:0;z-index:40;background:rgba(252,253,253,.92);backdrop-filter:blur(16px)}.site-header .inner{height:76px;display:flex;align-items:center;justify-content:space-between;gap:20px}.wordmark{font-size:1.15rem;letter-spacing:-.055em;font-weight:700}.wordmark b{font-weight:700;color:var(--blue)}.main-nav{display:flex;align-items:center;gap:29px;font-size:.83rem;color:var(--muted)}.main-nav a:hover,.main-nav a[aria-current=page]{color:var(--ink)}.main-nav .nav-cta{border:1px solid #bddce8;border-radius:40px;padding:10px 16px;color:var(--blue);background:#f4fbfe}.main-nav .nav-cta:hover{background:var(--ice)}.overline{font-size:.69rem;letter-spacing:.14em;text-transform:uppercase;font-weight:700;color:var(--blue)}.intro{padding:110px 0 95px}.intro-grid{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(200px,.55fr);gap:60px;align-items:end}.intro h1{font-size:clamp(3.1rem,7.2vw,6.65rem);letter-spacing:-.082em;line-height:1.13;font-weight:600;max-width:900px;margin:24px 0 27px;word-break:keep-all}.intro h1 em{font-style:normal;box-shadow:inset 0 -.19em 0 var(--ice);box-decoration-break:clone}.intro .lead{font-size:1.11rem;line-height:1.95;max-width:610px;color:#405968;word-break:keep-all;margin:0}.intro .side-note{border-top:1px solid var(--line);padding-top:15px;color:var(--muted);font-size:.81rem;line-height:1.9}.side-note strong{font-weight:600;color:var(--ink);display:block;margin-bottom:12px}.side-note span{display:block}.intro-meta{display:flex;flex-wrap:wrap;gap:15px 32px;color:var(--muted);font-size:.76rem;margin-top:38px}.intro-meta a{border-bottom:1px solid var(--blue);color:var(--blue)}.section-heading{display:flex;justify-content:space-between;align-items:baseline;gap:15px;margin-bottom:35px;padding-bottom:15px;border-bottom:1px solid var(--line)}.section-heading h2{font-size:1.68rem;letter-spacing:-.055em;font-weight:600;margin:0}.section-heading .count{color:var(--muted);font-size:.77rem}.work-section{padding-top:38px}.feature{padding:40px 0 72px;border-bottom:1px solid var(--line);display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center}.feature:last-child{border-bottom:0}.feature-copy .feature-num{color:var(--blue);font-size:.74rem;font-weight:700;letter-spacing:.07em}.feature-copy h3{font-size:clamp(2rem,3.6vw,3.65rem);letter-spacing:-.07em;line-height:1.2;margin:16px 0 13px;font-weight:600}.feature-copy .tagline{font-size:1.02rem;line-height:1.75;color:#365161;margin:0 0 20px}.feature-copy p{line-height:1.88;color:var(--muted);font-size:.92rem;word-break:keep-all}.small-stack{font-size:.71rem!important;letter-spacing:.01em;color:#58727f!important;margin:22px 0}.inline-link{display:inline-flex;gap:11px;align-items:center;border-bottom:1px solid var(--blue);padding-bottom:7px;font-size:.85rem;color:var(--blue);font-weight:700}.inline-link:hover{gap:17px}.feature-visual{min-height:350px;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:5px;position:relative}.visual-forestring{background:#e6f6fc}.visual-inc{background:#edf3f7}.visual-label{position:absolute;top:23px;left:25px;font-size:.66rem;font-weight:700;letter-spacing:.13em;color:#588295}.system-board{width:79%;background:#fff;border:1px solid #d3e8f1;box-shadow:0 20px 65px rgba(35,97,128,.09);padding:28px;position:relative}.sys-title{font-size:.74rem;font-weight:700;letter-spacing:.04em;margin-bottom:25px}.sys-top{display:grid;grid-template-columns:1fr 1fr;gap:12px}.sys-tile{background:#f6fafb;border:1px solid #e1ebf0;padding:15px 12px;font-size:.79rem;text-align:center;font-weight:600}.sys-tile small{display:block;color:var(--muted);font-size:.65rem;font-weight:400;margin-top:5px}.sys-connector{height:29px;width:1px;background:#a8cedc;margin:auto}.sys-db{text-align:center;border:1px solid #80bfda;background:#e9f7fc;padding:16px;color:#195b7a;font-size:.85rem;font-weight:700}.sys-db small{display:block;font-weight:400;font-size:.67rem;margin-top:5px;color:#4c7386}.window{width:82%;background:#fff;border:1px solid #cfdee6;box-shadow:0 16px 50px rgba(34,65,90,.07)}.window-head{height:35px;background:#f8fafb;border-bottom:1px solid #dce7ed;display:flex;align-items:center;gap:5px;padding:0 13px}.window-head span{width:7px;height:7px;border-radius:50%;border:1px solid #b1c4ce}.window-screen{padding:30px 34px 35px}.window-title{font-size:.83rem;font-weight:700;padding-bottom:15px;border-bottom:1px solid var(--line)}.window-row{height:31px;border-bottom:1px solid #edf0f1;display:flex;align-items:center;gap:13px}.window-row:before{content:'';display:block;background:#d9ebf3;width:24px;height:7px}.window-row i{display:block;height:6px;width:60%;background:#e5ebef}.window-row:nth-child(4) i{width:42%}.window-row:nth-child(5) i{width:70%}.window-foot{display:flex;gap:8px;margin-top:20px}.window-foot span{background:var(--ice);width:72px;height:19px}.window-foot span+span{background:#edf2f5;width:45px}.compact-head{margin-top:48px;margin-bottom:11px;border-top:1px solid var(--line);padding-top:26px;display:flex;justify-content:space-between;gap:20px}.compact-head h3{font-size:1.07rem;margin:0;letter-spacing:-.035em}.compact-head p{font-size:.77rem;color:var(--muted);margin:0}.project-list{margin-bottom:90px}.project-row{display:grid;grid-template-columns:165px 1fr 130px;gap:24px;align-items:start;padding:25px 0;border-bottom:1px solid var(--line)}.project-row .type{color:var(--blue);font-weight:600;font-size:.73rem}.project-row h4{margin:0 0 8px;font-weight:600;font-size:1.1rem;letter-spacing:-.035em}.project-row p{color:var(--muted);margin:0;line-height:1.7;font-size:.83rem}.project-row .row-action{font-size:.75rem;text-align:right;color:var(--blue)}.note-box{background:#ecf8fd;padding:44px 52px;margin-bottom:108px;display:grid;grid-template-columns:1.1fr 1fr;gap:40px;align-items:center}.note-box h3{font-size:1.75rem;letter-spacing:-.055em;margin:12px 0}.note-box p{font-size:.88rem;color:#486677;line-height:1.85}.note-box .note-side{border-left:1px solid #b2dbea;padding-left:27px}.note-side a{font-size:1.04rem;line-height:1.65;display:block;font-weight:600}.note-side small{display:block;color:#5b7b8c;margin-top:10px}.about-section{display:grid;grid-template-columns:1fr 1fr;gap:90px;padding:45px 0 100px;border-top:1px solid var(--line)}.about-section h2{font-size:1.68rem;letter-spacing:-.055em;margin:0 0 16px}.about-section p{font-size:.91rem;line-height:1.95;color:var(--muted)}.about-links{display:flex;gap:20px;flex-wrap:wrap;margin-top:22px}.about-links a{font-size:.82rem;border-bottom:1px solid var(--blue);color:var(--blue);padding-bottom:5px}.mini-label{font-size:.72rem;color:var(--blue);letter-spacing:.09em;font-weight:700;margin-bottom:14px}.skills{display:grid;gap:18px}.skills div{border-bottom:1px solid var(--line);padding-bottom:16px}.skills strong{font-size:.82rem;display:block;font-weight:600;margin-bottom:6px}.skills span{font-size:.79rem;color:var(--muted);line-height:1.7}.site-footer{border-top:1px solid var(--line);padding:28px 0 40px;color:var(--muted);font-size:.74rem}.site-footer .wrap{display:flex;justify-content:space-between;gap:15px}.page-hero{padding:89px 0 57px;border-bottom:1px solid var(--line)}.backlink{color:var(--blue);font-size:.78rem;font-weight:600}.page-hero h1{font-weight:600;font-size:clamp(2.8rem,6vw,5.4rem);line-height:1.18;letter-spacing:-.075em;max-width:900px;margin:24px 0 17px;word-break:keep-all}.page-hero p{color:var(--muted);font-size:1.05rem;line-height:1.85;max-width:750px}.case-meta{display:flex;gap:27px;flex-wrap:wrap;font-size:.77rem;color:var(--muted);padding-top:24px}.case-meta strong{display:block;font-weight:600;color:var(--ink);margin-bottom:5px}.article-layout{display:grid;grid-template-columns:minmax(0,1fr) 210px;gap:78px;padding-top:73px;padding-bottom:110px}.article-content{max-width:725px;font-size:1.015rem;line-height:2.06;color:#354b59;word-break:keep-all}.article-content h2{font-size:1.75rem;line-height:1.38;color:var(--ink);letter-spacing:-.053em;margin:74px 0 24px}.article-content h3{font-size:1.24rem;color:var(--ink);letter-spacing:-.035em;margin:34px 0 14px}.article-content p{margin:0 0 22px}.article-content ul{padding-left:1.2em}.article-content li{margin-bottom:12px}.article-content strong{font-weight:700;color:var(--ink)}.article-aside{align-self:start;position:sticky;top:108px;font-size:.78rem;color:var(--muted);border-left:1px solid var(--line);padding-left:23px}.article-aside strong{display:block;color:var(--ink);margin-bottom:18px}.article-aside a{display:block;margin-bottom:16px;line-height:1.5}.article-aside a:hover{color:var(--blue)}.insight{border-left:3px solid var(--ice-deep);padding:18px 25px;margin:32px 0 36px;background:#f0f9fc;font-size:.95rem;color:#32576b}.step-list{counter-reset:step;display:grid;gap:13px;margin:30px 0}.step{display:grid;grid-template-columns:42px 1fr;align-items:start;gap:18px;padding:19px 0;border-bottom:1px solid var(--line)}.step:before{counter-increment:step;content:'0' counter(step);font-size:.8rem;color:var(--blue);font-weight:700}.step strong{display:block;font-size:.97rem}.step p{font-size:.87rem;color:var(--muted);margin:4px 0 0}.architecture{border:1px solid var(--line);padding:26px 30px;margin:30px 0;background:#f7fbfd}.architecture .arch-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:.79rem;font-weight:600}.arch-row .node{padding:10px 13px;background:#fff;border:1px solid #d4e6ec}.arch-row .node.ice{background:#def2fa;border-color:#9dd5e8}.arch-row .arrow{color:#4c8ba9}.architecture p{font-size:.76rem;margin:15px 0 0}.case-links{display:flex;gap:16px;flex-wrap:wrap;margin-top:35px}.case-links a{color:var(--blue);font-size:.84rem;font-weight:700;border-bottom:1px solid var(--blue)}.image-policy{font-size:.75rem!important;color:var(--muted)!important;margin-top:25px!important}.journal-list{margin:60px 0 95px}.journal-item{border-bottom:1px solid var(--line);padding:26px 0;display:grid;grid-template-columns:130px 1fr 20px;gap:22px}.journal-item:first-child{border-top:1px solid var(--line)}.journal-item time{font-size:.78rem;color:var(--blue)}.journal-item h2{font-weight:600;margin:0 0 9px;letter-spacing:-.03em;font-size:1.23rem}.journal-item p{margin:0;font-size:.83rem;color:var(--muted);line-height:1.7}.smaller{font-size:.8rem}.notice{font-size:.77rem;color:var(--muted);line-height:1.75;margin-bottom:25px}.pill-links{display:flex;gap:12px;flex-wrap:wrap}.pill-links a{border:1px solid #b0dbe9;padding:10px 15px;border-radius:60px;font-size:.78rem;color:var(--blue)}.pill-links a:hover{background:var(--ice)}.screen-split{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:30px 0}.screenshot-placeholder{background:#f5fafc;border:1px dashed #bedae6;min-height:155px;display:flex;align-items:center;justify-content:center;text-align:center;color:#688593;padding:20px;font-size:.82rem;line-height:1.6}.article-divider{height:1px;background:var(--line);margin:57px 0}@media(max-width:830px){.intro-grid,.feature,.about-section,.note-box,.article-layout{grid-template-columns:1fr}.intro{padding:77px 0 70px}.intro-grid{gap:38px}.feature{gap:28px}.feature-visual{min-height:300px}.feature-copy{order:1}.feature-visual{order:2}.article-layout{gap:30px}.article-aside{display:none}.note-box .note-side{border-left:0;border-top:1px solid #b2dbea;padding:18px 0 0}.project-row{grid-template-columns:100px 1fr 56px;gap:12px}.about-section{gap:35px}.note-box{padding:30px}}@media(max-width:550px){.wrap{width:min(calc(100% - 34px),var(--max))}.site-header .inner{height:66px}.main-nav{gap:13px;font-size:.74rem}.main-nav .nav-cta{display:none}.intro h1{font-size:clamp(2.7rem,12vw,4rem)}.intro .lead{font-size:.96rem}.section-heading h2{font-size:1.43rem}.feature{padding:22px 0 57px}.feature-visual{min-height:245px}.system-board{width:88%;padding:20px}.visual-label{font-size:.58rem;top:13px;left:15px}.sys-title{margin-bottom:15px}.sys-tile{font-size:.73rem;padding:11px 7px}.window-screen{padding:20px}.project-row{grid-template-columns:1fr 35px;gap:8px 15px}.project-row .type{grid-column:1/-1}.project-row .row-action{grid-column:2;grid-row:2}.project-row h4{font-size:1rem}.compact-head{display:block}.compact-head p{margin-top:7px}.note-box{margin-bottom:60px}.about-section{padding-bottom:60px}.page-hero{padding:60px 0 37px}.page-hero h1{font-size:2.7rem}.article-layout{padding-top:35px;padding-bottom:55px}.article-content{font-size:.95rem;line-height:1.92}.article-content h2{font-size:1.5rem;margin-top:55px}.case-meta{gap:18px}.architecture{padding:20px 16px}.journal-item{grid-template-columns:1fr 18px;gap:9px}.journal-item time{grid-column:1/-1}.site-footer .wrap{flex-direction:column}.screen-split{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}.stat-row{display:flex;gap:28px;flex-wrap:wrap;margin:22px 0 4px;padding:16px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.stat-row div{min-width:72px}.stat-row dt{font-size:.68rem;color:var(--muted);letter-spacing:.02em}.stat-row dd{margin:4px 0 0;font-size:1.32rem;font-weight:600;letter-spacing:-.04em;color:var(--ink)}
.phone-pair{display:flex;gap:18px;align-items:flex-start;padding:52px 0 0;height:100%}.phone{width:41%;max-width:188px;height:auto;border-radius:22px;border:1px solid #cfe3ec;box-shadow:0 18px 48px rgba(24,73,98,.14);background:#fff}.phone+.phone{margin-top:34px}.visual-forestring{min-height:430px;align-items:flex-start}
.flow-card{list-style:none;margin:40px 0 0;padding:0;width:84%;display:grid;gap:10px}.flow-card li{display:grid;grid-template-columns:28px 1fr auto;gap:12px;align-items:center;background:#fff;border:1px solid #d6e4eb;padding:14px 16px;font-size:.82rem;font-weight:600}.flow-card b{font-size:.7rem;color:var(--blue)}.flow-card small{display:block;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:400;font-size:.68rem;color:var(--muted);margin-top:3px}.flow-card em{font-style:normal;font-size:.68rem;padding:4px 9px;border-radius:30px}.flow-card .ok{background:#e1f3ea;color:#1d6b46}.flow-card .fail{background:#fde8e6;color:#a8392d}.flow-note{position:absolute;bottom:20px;left:25px;right:25px;margin:0;font-size:.74rem;color:#4f7284}.visual-inc{flex-direction:column;padding-bottom:40px}
.metric-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin:38px 0 0;border-top:1px solid var(--line)}.metric-grid div{padding:22px 20px 4px 0}.metric-grid div+div{padding-left:20px;border-left:1px solid var(--line)}.metric-grid dt{font-size:.74rem;color:var(--muted)}.metric-grid dd{margin:8px 0 6px;font-size:2.2rem;font-weight:600;letter-spacing:-.05em;color:var(--ink);line-height:1.1}.metric-grid dd small{font-size:.95rem;margin-left:2px;color:var(--muted);font-weight:500}.metric-grid p{margin:0!important;font-size:.76rem!important;color:var(--muted)!important;line-height:1.6!important}.metric-note{font-size:.72rem!important;color:#7a8d97!important;margin-top:18px!important}
.screen-gallery{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:24px 0 8px}.screen-gallery figure{margin:0}.screen-gallery img{width:100%;height:auto;border-radius:14px;border:1px solid #d9e7ee;display:block;background:#fff}.screen-gallery figcaption{font-size:.74rem;line-height:1.55;color:var(--muted);margin-top:9px}.gallery-note{font-size:.74rem!important;color:#7a8d97!important}
.tech-facts{display:flex;flex-wrap:wrap;gap:10px;margin:26px 0 22px}.tech-facts span{border:1px solid #cfe3ec;background:#f6fbfd;padding:9px 14px;font-size:.8rem;color:var(--muted);line-height:1.2}.tech-facts b{color:var(--blue);font-size:1.05rem;margin-right:6px;font-weight:700}
@media(max-width:830px){.metric-grid{grid-template-columns:1fr 1fr}.metric-grid div:nth-child(3){padding-left:0;border-left:0}.metric-grid div:nth-child(n+3){border-top:1px solid var(--line)}.screen-gallery{grid-template-columns:1fr 1fr}.visual-forestring{min-height:400px}}
@media(max-width:550px){.main-nav .nav-cta{display:inline-block;padding:7px 11px;font-size:.72rem}.main-nav{gap:11px}.stat-row{gap:20px}.stat-row dd{font-size:1.15rem}.metric-grid dd{font-size:1.75rem}.metric-grid div{padding-right:12px}.metric-grid div+div{padding-left:12px}.flow-card{width:90%}.flow-card li{grid-template-columns:22px 1fr auto;padding:12px;font-size:.76rem}.visual-inc{min-height:330px}.phone-pair{gap:12px;padding-top:44px}.visual-forestring{min-height:360px}}
.project-row .row-action{white-space:nowrap}.about-section .mini-label{display:block}@media(max-width:830px){.project-row{grid-template-columns:100px 1fr auto}}@media(max-width:550px){.project-row{grid-template-columns:1fr}.project-row .row-action{grid-column:1;grid-row:auto;text-align:left}.architecture .arch-row{flex-direction:column;align-items:stretch;gap:6px}.arch-row .node{text-align:center}.arch-row .arrow{align-self:center;transform:rotate(90deg)}.arch-row .arrow.to-hub{transform:rotate(45deg)}.arch-row .arrow.from-hub{transform:rotate(-45deg)}}
.visual-note{position:absolute;top:23px;right:25px;font-size:.62rem;color:#6f8f9d;letter-spacing:.02em}@media(max-width:550px){.visual-note{font-size:.56rem;top:13px;right:15px}}
.intro-proof{display:flex;flex-wrap:wrap;gap:8px;list-style:none;padding:0;margin:24px 0 0}.intro-proof li{border:1px solid #cfe3ec;background:#f6fbfd;padding:8px 13px;font-size:.8rem;color:var(--muted);line-height:1.2}.intro-proof b{color:var(--blue);font-weight:700;margin-right:2px}.store-links{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;margin:20px 0 0;font-size:.78rem;color:var(--muted)}.store-links a{color:var(--blue);font-weight:600;border-bottom:1px solid var(--blue);padding-bottom:2px}.case-meta a{color:var(--blue);border-bottom:1px solid var(--blue)}
