:root{--border:#e5e5e5;--text:#0c0a09;--muted:#737373;--surface:#f6f6f6;--surface-strong:#eeeeee;--background:#f6f6f6;--max-width:655px}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--background);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:16px;line-height:1.5}a{color:inherit;-webkit-text-decoration-color:var(--border);text-decoration-color:var(--border);text-underline-offset:3px}a:hover{-webkit-text-decoration-color:var(--text);text-decoration-color:var(--text)}button{font:inherit}.language-switcher,.page-shell,.site-footer,.top-social-links{width:min(100% - 40px,var(--max-width));margin:0 auto}.language-switcher{display:flex;gap:8px;padding-top:28px}.language-switcher a{display:inline-flex;align-items:center;min-height:32px;padding:5px 10px;border:1px solid var(--border);background:transparent;color:var(--muted);text-decoration:none;transition:background-color .12s ease,border-color .12s ease,color .12s ease}.language-switcher a:focus-visible,.language-switcher a:hover{border-color:var(--text);color:var(--text)}.language-switcher a.is-active{border-color:#d9ecb5;background:#d9ecb5;color:var(--text)}.top-social-links{margin-top:16px;margin-bottom:-8px;color:var(--muted)}.page-shell{padding-top:52px}.intro{margin-bottom:84px}.subpage .intro{margin-bottom:92px}.intro.compact{max-width:650px}.hero-image{display:block;width:100%;height:auto;margin-bottom:48px}.intro-profile{display:flex;align-items:flex-start;gap:24px}.intro-avatar{display:block;width:164px;height:164px;object-fit:contain;flex:0 0 164px}.intro-copy{max-width:650px;min-width:0}h1,h2,p{margin-top:0}h1{margin-bottom:18px;font-size:24px}h1,h2{line-height:1.35;letter-spacing:0}h2{margin-bottom:34px;font-size:18px}.lead{margin-bottom:0;color:var(--text)}.lead span{display:block}.profile-link{display:inline-block;margin-top:18px;color:var(--muted)}.section{margin-bottom:92px}.text-list{display:grid;grid-gap:24px;gap:24px}.text-item{display:block;margin:-8px -10px;padding:8px 10px;text-decoration:none;transition:background-color .12s ease,color .12s ease}.text-item span{display:inline;font-weight:400}.text-item time{margin-left:8px;color:var(--muted);font-size:13px;white-space:nowrap}.text-item small{display:block;margin-top:2px;color:var(--muted);font-size:16px;line-height:1.5;transition:color .12s ease}.text-item small span{display:block!important}.static-item{cursor:default}#projects .text-item:focus-visible,#projects .text-item:hover{background:#d9ecb5}#projects .text-item:focus-visible small,#projects .text-item:hover small{color:var(--text)}.note-list .text-item:focus-visible,.note-list .text-item:hover{background:#d9ecb5}.note-list .text-item:focus-visible small,.note-list .text-item:hover small{color:var(--text)}.work-list .text-item:focus-visible,.work-list .text-item:hover{background:#d9ecb5}.more-link{width:-moz-fit-content;width:fit-content}.back-link{display:inline-block;margin-bottom:34px;color:var(--muted)}.filters{display:flex;gap:28px;margin:-8px 0 26px}.filter{border:0;background:transparent;color:var(--text);padding:0;cursor:pointer}.filter.is-active,.filter:hover{text-decoration:underline;-webkit-text-decoration-color:var(--border);text-decoration-color:var(--border);text-underline-offset:4px}.note.is-hidden{display:none}body:has(.dashboard-page) .hopping-dongguri,body:has(.dashboard-page) .language-switcher,body:has(.dashboard-page) .top-social-links{display:none}.dashboard-page .intro{margin-bottom:70px}.dashboard-eyebrow,.dashboard-generated{margin-bottom:12px;color:var(--muted);font-size:14px}.dashboard-generated{margin-top:22px;margin-bottom:0}.dashboard-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-gap:1px;gap:1px;border:1px solid var(--border);background:var(--border)}.dashboard-summary-card{min-height:92px;padding:16px;background:var(--background)}.dashboard-summary-card span{display:block;margin-bottom:16px;color:var(--muted);font-size:14px}.dashboard-summary-card strong{display:block;font-size:28px;line-height:1}.dashboard-issue-warning,.dashboard-status-warning,.dashboard-summary-card.is-warning strong{color:#8a5a00}.dashboard-issue-error,.dashboard-status-error,.dashboard-summary-card.is-error strong{color:#9f1239}.dashboard-check-list{display:grid;grid-gap:16px;gap:16px}.dashboard-check-item{display:grid;grid-template-columns:minmax(0,220px) minmax(0,1fr);grid-gap:18px;gap:18px;padding:16px 0;border-top:1px solid var(--border)}.dashboard-check-item:last-child{border-bottom:1px solid var(--border)}.dashboard-check-item strong,.dashboard-table strong{display:block;font-weight:600}.dashboard-check-item small,.dashboard-table small{display:block;margin-top:3px;color:var(--muted);font-size:13px;line-height:1.45}.dashboard-check-item ul{margin:0;padding-left:18px}.dashboard-check-item li+li{margin-top:3px}.dashboard-empty{color:var(--muted)}.dashboard-table-wrap{overflow-x:auto;border:1px solid var(--border)}.dashboard-table{width:100%;min-width:820px;border-collapse:collapse;font-size:14px}.dashboard-table td,.dashboard-table th{padding:12px 14px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.dashboard-table th{color:var(--muted);font-weight:500}.dashboard-table tr:last-child td{border-bottom:0}.dashboard-table a{color:var(--text)}.dashboard-table-compact{min-width:620px}.dashboard-split-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:24px;gap:24px}.dashboard-breakdown h3,.dashboard-live-table h3{margin:0 0 12px;font-size:16px}.dashboard-featured-list{display:grid;grid-gap:1px;gap:1px;border:1px solid var(--border);background:var(--border)}.dashboard-featured-item{display:grid;grid-template-columns:90px minmax(0,1fr) minmax(0,1.35fr) auto;grid-gap:16px;gap:16px;align-items:start;padding:14px 16px;background:var(--background)}.dashboard-featured-item em,.dashboard-featured-item small,.dashboard-featured-item span{color:var(--muted);font-size:13px;font-style:normal;line-height:1.45}.dashboard-featured-item strong{font-weight:600}.dashboard-featured-item a{color:var(--text);white-space:nowrap}.dashboard-link-list{display:grid;grid-gap:10px;gap:10px;color:var(--muted)}.dashboard-link-list a,.dashboard-link-list code{width:-moz-fit-content;width:fit-content}.dashboard-link-list code{padding:2px 6px;border:1px solid var(--border);background:var(--surface-strong);color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;font-size:13px}.dashboard-live-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:1px;gap:1px;border:1px solid var(--border);background:var(--border)}.dashboard-live-stack{display:grid;grid-gap:24px;gap:24px}.dashboard-live-panel{min-height:190px;padding:16px;background:var(--background)}.dashboard-live-panel header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:18px}.dashboard-live-panel h3{margin:0;font-size:16px;line-height:1.35}.dashboard-live-panel header span{flex:0 0 auto;color:var(--muted);font-size:13px}.dashboard-live-panel header span.is-ok{color:var(--text)}.dashboard-live-panel header span.is-warning{color:#8a5a00}.dashboard-live-panel header span.is-error{color:#9f1239}.dashboard-live-panel p{margin-bottom:0;color:var(--muted);font-size:14px}.dashboard-metric-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:14px;gap:14px;margin:0}.dashboard-metric-list div{min-width:0}.dashboard-metric-list dt{color:var(--muted);font-size:13px}.dashboard-metric-list dd{margin:4px 0 0;font-size:22px;font-weight:600;line-height:1}.dashboard-live-copy{display:grid;grid-gap:6px;gap:6px;color:var(--muted);font-size:14px}.dashboard-live-copy strong{color:var(--text);font-weight:600}.dashboard-live-issues{margin:18px 0 0;padding:0;list-style:none;color:var(--muted);font-size:13px}.dashboard-live-issues li+li{margin-top:8px}.dashboard-live-issues span,.dashboard-live-issues strong{display:block}.dashboard-live-issues strong{color:var(--text);font-weight:500}.dashboard-live-table{min-width:0}.dashboard-chart-panel{padding:16px;border:1px solid var(--border);background:var(--background)}.dashboard-chart-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:12px}.dashboard-chart-header h3{margin:0;font-size:16px}.dashboard-chart-header span,.dashboard-chart-legend{color:var(--muted);font-size:13px}.dashboard-chart-legend{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:12px}.dashboard-chart-legend span{display:inline-flex;align-items:center;gap:6px}.dashboard-chart-legend i{width:18px;height:2px;display:inline-block}.dashboard-line-chart{display:block;width:100%;height:auto;overflow:visible}.dashboard-line-chart line{stroke:var(--border);stroke-width:1}.dashboard-line-chart polyline{fill:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}.dashboard-line-chart text{fill:var(--muted);font-size:12px}.dashboard-insight-board{display:grid;grid-gap:24px;gap:24px}.dashboard-insight-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:1px;gap:1px;border:1px solid var(--border);background:var(--border)}.dashboard-insight-card{min-width:0;padding:16px;background:var(--background)}.dashboard-insight-card small,.dashboard-insight-card span{display:block;color:var(--muted);font-size:13px;line-height:1.45}.dashboard-insight-card strong{display:block;margin:10px 0 8px;font-size:18px;line-height:1.35;overflow-wrap:anywhere}.dashboard-insight-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:24px;gap:24px}.dashboard-ranking-panel{min-width:0;padding:16px;border:1px solid var(--border);background:var(--background)}.dashboard-ranking-panel header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.dashboard-ranking-panel h3{margin:0;font-size:16px}.dashboard-ranking-message,.dashboard-ranking-panel header span{color:var(--muted);font-size:13px}.dashboard-ranking-message{margin-bottom:0}.dashboard-ranking-list{display:grid;grid-gap:12px;gap:12px;margin:0;padding:0;list-style:none}.dashboard-ranking-row{display:flex;align-items:baseline;justify-content:space-between;gap:14px;margin-bottom:5px}.dashboard-ranking-row strong{min-width:0;font-weight:500;overflow-wrap:anywhere}.dashboard-ranking-row span{flex:0 0 auto;color:var(--muted);font-size:12px}.dashboard-ranking-bar{height:4px;background:var(--surface-strong)}.dashboard-ranking-bar i{display:block;height:100%;min-width:2px;background:#d9ecb5}.hopping-dongguri{position:fixed;right:max(18px,calc((100vw - var(--max-width)) / 2 - 86px));bottom:22px;z-index:20;display:grid;justify-items:center;grid-gap:8px;gap:8px;pointer-events:none}.hopping-dongguri button{width:64px;height:64px;padding:0;border:0;background:transparent;cursor:pointer;pointer-events:auto;transition:transform .12s ease}.hopping-dongguri button:focus-visible,.hopping-dongguri button:hover{outline:0;transform:translateY(-2px)}.hopping-dongguri button.is-hopping{animation:dongguri-hop 1.2s cubic-bezier(.2,.8,.2,1)}.dongguri-character{position:relative;display:block;width:100%;height:100%;transform-origin:50% 78%;animation:dongguri-breathe 3.6s ease-in-out infinite}.dongguri-character img{display:block;width:100%;height:100%;object-fit:contain}.dongguri-bubble{max-width:150px;padding:6px 9px;border:1px solid var(--border);background:var(--background);color:var(--text);font-size:13px;line-height:1.35;text-align:center}@keyframes dongguri-hop{0%{transform:translate(0) rotate(0deg)}12%{transform:translateY(4px) scale(1.04,.94) rotate(0deg)}28%{transform:translate(-10px,-32px) scale(.98,1.04) rotate(-7deg)}55%{transform:translate(8px,-10px) rotate(6deg)}78%{transform:translateY(-16px) rotate(-3deg)}to{transform:translate(0) rotate(0deg)}}@keyframes dongguri-breathe{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(1px) scale(1.015,.992)}}.article{padding-bottom:32px}.article-header{margin-bottom:54px}.article-meta{display:flex;gap:10px;margin-bottom:16px;color:var(--muted);font-size:14px}.article-description{margin-bottom:0;color:var(--muted)}.article-body{color:var(--text)}.article-body ol,.article-body p,.article-body ul{margin:0 0 28px}.article-body h2,.article-body h3,.article-body h4{margin:48px 0 18px;line-height:1.45;letter-spacing:0}.article-body h2{font-size:22px}.article-body h3{font-size:19px}.article-body h4{font-size:17px}.article-body ol,.article-body ul{padding-left:22px}.article-body li+li{margin-top:4px}.article-body blockquote{margin:34px 0;padding-left:16px;border-left:2px solid var(--border);color:var(--muted)}.article-body hr{height:1px;margin:44px 0;border:0;background:var(--border)}.article-body figure{margin:36px 0}.article-body img{display:block;width:100%;height:auto}.article-body figcaption{margin-top:8px;color:var(--muted);font-size:13px;line-height:1.45}.article-body strong{font-weight:600}.site-footer{justify-content:flex-start;min-height:120px;color:var(--muted)}.site-footer,.social-links{display:flex;align-items:center}.social-links{gap:14px;flex-wrap:wrap}.social-links a{display:inline-flex;align-items:center;min-height:24px;color:var(--muted)}.social-links svg{width:18px;height:18px;display:block;fill:none;stroke:currentColor;stroke-width:1.8}.social-links a[aria-label=GitHub] svg{fill:currentColor;stroke:none}@media (max-width:760px){.language-switcher,.page-shell,.site-footer,.top-social-links{width:min(100% - 28px,var(--max-width))}.page-shell{padding-top:48px}.hero-image{margin-bottom:40px}.intro-profile{gap:18px}.intro-avatar{width:142px;height:142px;flex-basis:142px}.intro,.section{margin-bottom:72px}.dashboard-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-check-item{gap:10px}.dashboard-check-item,.dashboard-featured-item,.dashboard-insight-cards,.dashboard-insight-grid,.dashboard-live-grid,.dashboard-split-grid{grid-template-columns:1fr}.dashboard-featured-item{gap:6px}.filters{gap:20px;overflow-x:auto;padding-bottom:4px}.site-footer{align-items:flex-start;flex-direction:column;justify-content:center}.hopping-dongguri{right:14px;bottom:14px}.hopping-dongguri button{width:54px;height:54px}}@media (prefers-reduced-motion:reduce){.hopping-dongguri *,.hopping-dongguri button,.hopping-dongguri button.is-hopping{animation:none;transition:none}}