.pf{--ink:#1a2332;--sub:#5a6678;--line:#e3e7ee;--accent:#0f4c81;--accent-soft:#eef4fa;--box:#f7f9fc;color:var(--ink);line-height:1.75;background:#fff;min-height:100vh;font-family:Pretendard,Apple SD Gothic Neo,Noto Sans KR,system-ui,sans-serif;-webkit-font-smoothing:antialiased}.pf *,.pf :after,.pf :before{margin:0;padding:0;box-sizing:border-box}.pf .wrap{max-width:780px;margin:0 auto;padding:0 24px}.pf header{border-bottom:1px solid var(--line);padding:64px 0 48px}.pf .eyebrow{font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);font-weight:700}.pf h1{font-size:34px;line-height:1.3;margin:10px 0 6px;letter-spacing:-.01em}.pf .tagline{font-size:17px;color:var(--sub);margin-bottom:24px}.pf .intro p{margin-bottom:12px;font-size:15.5px}.pf .intro .note{font-size:13.5px;color:var(--sub);border-left:3px solid var(--line);padding-left:12px}.pf section{padding:48px 0;border-bottom:1px solid var(--line)}.pf .part-label{font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);font-weight:700;margin-bottom:6px}.pf h2{font-size:24px;margin-bottom:8px;letter-spacing:-.01em}.pf .part-desc{color:var(--sub);font-size:15px;margin-bottom:32px}.pf .explainer{background:var(--accent-soft);border-radius:8px;padding:16px 18px;font-size:14.5px;margin-bottom:32px}.pf .explainer strong{color:var(--accent)}.pf article.project{margin-bottom:44px}.pf article.project:last-child{margin-bottom:0}.pf .proj-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.pf .proj-num{font-size:13px;font-weight:700;color:var(--accent)}.pf h3{font-size:19px}.pf h3,.pf h4{letter-spacing:-.01em}.pf h4{font-size:18px;font-weight:700}.pf h3.sub{font-size:17px;margin:36px 0 8px;padding-top:20px;border-top:1px solid var(--line)}.pf .sub-desc{color:var(--sub);font-size:14px;margin-bottom:10px}.pf .oneliner{font-size:15px;color:var(--sub);margin:6px 0 14px}.pf .body-text p{font-size:15px;margin-bottom:10px}.pf .analysis strong,.pf .body-text strong{color:var(--ink);font-weight:700}.pf .scope{background:var(--box);border:1px solid var(--line);border-radius:8px;padding:14px 18px;margin:14px 0}.pf .scope .scope-label{font-size:12.5px;font-weight:700;color:var(--accent);letter-spacing:.04em;margin-bottom:8px}.pf .scope ul{list-style:none;display:grid;grid-template-columns:1fr 1fr;gap:2px 20px}.pf .scope li{font-size:14px;padding-left:14px;position:relative}.pf .scope li:before{content:"·";position:absolute;left:3px;color:var(--accent);font-weight:700}.pf .scope .scope-note{font-size:13px;color:var(--sub);margin-top:10px;padding-top:8px;border-top:1px solid var(--line)}.pf .works{font-size:14.5px;margin:12px 0;padding-left:12px;border-left:3px solid var(--accent-soft)}.pf .works .works-label{font-weight:700;color:var(--accent)}.pf .table-wrap{overflow-x:auto;margin:14px 0 8px}.pf table{border-collapse:collapse;width:100%;min-width:700px;font-size:13.5px;table-layout:fixed}.pf col.c-proj{width:14%}.pf col.c-item{width:17%}.pf col.c-val{width:30%}.pf col.c-why{width:39%}.pf td,.pf th{border:1px solid var(--line);padding:8px 12px;text-align:left;vertical-align:top}.pf th{background:var(--box);font-weight:600;white-space:nowrap}.pf td.proj{font-weight:700}.pf td.item,.pf td.proj{white-space:nowrap}.pf td.val{font-variant-numeric:tabular-nums;font-weight:600;word-break:keep-all}.pf td.why{color:var(--sub);font-size:13px}.pf td.plain{font-weight:400}.pf .table-note{font-size:13px;color:var(--sub);margin-bottom:24px}.pf .dl{display:inline-block;margin-top:8px;font-size:14px;font-weight:600;color:var(--accent);text-decoration:none;border:1px solid var(--accent);border-radius:6px;padding:7px 14px}.pf .dl:hover{background:var(--accent-soft)}.pf .conclusion{background:var(--box);border-left:3px solid var(--accent);border-radius:0 8px 8px 0;padding:14px 18px;font-size:14.5px;margin:14px 0 0}.pf .conclusion .k{font-weight:700;color:var(--accent)}.pf footer{padding:48px 0 72px}.pf footer h2{margin-bottom:16px}.pf footer p{font-size:15px;margin-bottom:12px}.pf code.cmd{background:var(--box);border:1px solid var(--line);border-radius:4px;padding:2px 7px;font-size:13.5px;font-family:SF Mono,Menlo,Consolas,monospace}.pf .prev{margin-top:32px;padding-top:24px;border-top:1px solid var(--line)}.pf .prev .prev-label{font-size:12.5px;color:var(--sub)}.pf .prev a{display:inline-block;margin-top:4px;font-size:15px;font-weight:600;color:var(--ink);text-decoration:none}.pf .prev a:hover{color:var(--accent)}@media (max-width:560px){.pf h1{font-size:27px}.pf header{padding:44px 0 36px}.pf section{padding:36px 0}.pf .wrap{padding:0 18px}.pf .scope ul{grid-template-columns:1fr}}.pf header.hero{padding:30px 0 24px}.pf .hero h1{font-size:29px;line-height:1.22;margin:6px 0 0}.pf .lead{font-size:15px;color:var(--sub);margin:9px 0 0;max-width:680px;line-height:1.6}.pf .map{margin-top:14px;border:1px solid var(--line);border-radius:8px;overflow:hidden}.pf .map-label{background:var(--box);border-bottom:1px solid var(--line);padding:5px 16px;font-size:12px;font-weight:700;color:var(--accent);letter-spacing:.06em}.pf .map-row{display:grid;grid-template-columns:28px 218px 1fr;align-items:baseline;gap:10px;padding:7px 16px;border-top:1px solid var(--line);text-decoration:none;color:inherit;line-height:1.5}.pf .map-row:first-of-type{border-top:none}.pf .map-row:hover{background:var(--accent-soft)}.pf .map-num{font-size:12px;font-weight:700;color:var(--accent)}.pf .map-name{font-size:15px;font-weight:700}.pf .map-note{font-size:13.5px;color:var(--sub)}.pf .map-row:has(.map-key){grid-template-columns:104px 1fr}.pf .map-key{font-size:13px;font-weight:700;color:var(--accent)}.pf .map-text{font-size:14px;color:var(--ink)}.pf .hero-cta{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:16px}.pf .hero-cta .dl{margin-top:0}.pf .hero-note{flex:1;min-width:240px}.pf .hero-note,.pf .more{font-size:13px;color:var(--sub)}.pf .more{margin-top:12px}.pf .ref-note{font-size:13px;color:var(--sub);margin-top:24px;padding-left:12px;border-left:3px solid var(--line)}@media (max-width:640px){.pf header.hero{padding:20px 0 14px}.pf .hero h1{font-size:21.5px;line-height:1.2}.pf .lead{font-size:13.5px;line-height:1.5;margin-top:6px}.pf .map{margin-top:10px}.pf .map-row{grid-template-columns:22px 1fr;row-gap:0;padding:5px 12px;line-height:1.4}.pf .map-name{grid-column:2;font-size:14px}.pf .map-note{grid-column:2;font-size:12px}.pf .map-text{font-size:13px}.pf .hero-cta{margin-top:12px;gap:10px}.pf .hero-note,.pf .more{font-size:12px}.pf .more{margin-top:8px}.pf .map-label{padding:4px 12px}.pf .map-row:has(.map-key){grid-template-columns:1fr}.pf .map-key{font-size:12px}}.pf .run{margin:12px 0 0;display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.pf .run .run-time{font-size:13px;color:var(--sub)}.pf .sources{margin-top:28px;padding-top:20px;border-top:1px solid var(--line)}.pf .sources-label{font-size:12px;font-weight:700;color:var(--accent);letter-spacing:.06em;margin-bottom:8px}.pf .sources ul{list-style:none}.pf .sources li{font-size:13.5px;color:var(--sub);line-height:1.7}.pf .status{display:inline-block;font-size:11.5px;font-weight:700;line-height:1.5;padding:1px 7px;border-radius:4px;border:1px solid;vertical-align:2px;white-space:nowrap}.pf .status.ok{color:#12683f;border-color:#b9dcc8;background:#eef7f1}.pf .status.wip{color:#9a5410;border-color:#eddcc4;background:#fbf4e9}.pf .status.todo{color:var(--sub);border-color:var(--line);background:var(--box)}.pf .rules{border:1px solid var(--line);border-radius:8px;overflow:hidden;margin:12px 0 8px}.pf .rule{display:grid;grid-template-columns:210px 1fr;gap:16px;padding:12px 18px;border-top:1px solid var(--line)}.pf .rule:first-child{border-top:none}.pf .rule-k{font-size:14.5px;font-weight:700;color:var(--accent)}.pf .rule-v{font-size:14.5px;color:var(--ink)}.pf .figure{margin:16px 0 18px}.pf .figure img{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:8px}.pf .figure figcaption{font-size:12.5px;color:var(--sub);margin-top:8px}.pf .dl.ghost{color:var(--sub);border-color:var(--line)}.pf .dl.ghost:hover{background:var(--box);color:var(--accent);border-color:var(--accent)}.pf article.project .proj-head{row-gap:4px}@media (max-width:640px){.pf .rule{grid-template-columns:1fr;gap:4px;padding:11px 14px}.pf h3.sub{margin-top:28px;padding-top:16px;font-size:16px}.pf h4{font-size:16.5px}}