:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--primary:#2563eb;--primary-hover:#1d4ed8;--background:#f7f7fa;--surface:#fff;--text:#17202d;--text-secondary:#606c7c;--border:#e5e7ee;--footer:#fff;--footer-text:#606c7c;--footer-strong:#17202d;--tooltip-bg:#17202d;--tooltip-text:#fff;--soft:#edf3ff;--soft-border:#d7e4fd;--button:#2563eb;--button-hover:#1d4ed8;--button-text:#fff;--shadow:0 10px 36px #1428550d;--excel-green:#107c41;--danger:#dc2626;--success:#15803d;--glow-core:color-mix(in srgb, var(--primary) 12%, transparent);--glow-mid:color-mix(in srgb, var(--primary) 6%, transparent);--sheen:color-mix(in srgb, var(--primary) 6%, transparent);--sheen-border:color-mix(in srgb, var(--primary) 55%, transparent);--ease:cubic-bezier(.2,.65,.3,1);--duration:.16s;--font-sans:"Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont, "Noto Sans CJK KR", "Apple SD Gothic Neo", "Malgun Gothic", sans-serif}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--primary:#60a5fa;--primary-hover:#93c5fd;--background:#12141b;--surface:#1d202b;--text:#f1eff4;--text-secondary:#abb0be;--border:#343747;--footer:#101218;--footer-text:#abb0be;--footer-strong:#f1eff4;--tooltip-bg:#0b0d12;--tooltip-text:#f1eff4;--soft:#202f4c;--soft-border:#354a6f;--danger:#f87171;--success:#4ade80;--shadow:0 10px 36px #0000001a;--glow-core:color-mix(in srgb, var(--primary) 24%, transparent);--glow-mid:color-mix(in srgb, var(--primary) 11%, transparent);--sheen:color-mix(in srgb, var(--primary) 9%, transparent);--sheen-border:color-mix(in srgb, var(--primary) 65%, transparent)}*,:before,:after{box-sizing:border-box}body{background:var(--background);color:var(--text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;word-break:keep-all;overflow-wrap:anywhere;margin:0;font-size:16px;line-height:1.75}button,input,textarea{font:inherit}a{color:inherit;text-decoration:none}button{cursor:pointer}button,a{-webkit-tap-highlight-color:transparent}button,a,summary{touch-action:manipulation}a,button,summary{transition:color var(--duration) var(--ease), background-color var(--duration) var(--ease), border-color var(--duration) var(--ease), transform var(--duration) var(--ease)}:focus-visible{outline:3px solid var(--primary);outline-offset:5px;border-radius:4px}::selection{background:var(--soft-border);color:var(--text)}h1,h2,h3,p{margin:0}h1,h2,h3{letter-spacing:-.045em;line-height:1.35}strong{font-weight:700}svg{vertical-align:middle;flex-shrink:0;display:inline-block}[hidden]{display:none!important}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:100;background:var(--button);color:#fff;border-radius:8px;padding:12px 20px;position:fixed;top:12px;left:20px;transform:translateY(-180%)}.skip-link:focus{transform:none}.pointer-glow{z-index:-1;pointer-events:none;opacity:0;width:36rem;height:36rem;transition:opacity .32s var(--ease);background:radial-gradient(circle, var(--glow-core), var(--glow-mid) 34%, transparent 68%);will-change:transform;border-radius:50%;position:fixed;top:0;left:0}.pointer-glow.is-active{opacity:1}@media (hover:none),(pointer:coarse),(prefers-reduced-motion:reduce){.pointer-glow{display:none}}.zoom-trigger{width:100%;color:inherit;font:inherit;text-align:inherit;cursor:zoom-in;background:0 0;border:0;border-radius:12px;padding:0;display:block}.lightbox{z-index:200;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);animation:lightbox-in .18s var(--ease);background:#090b11cc;justify-content:center;align-items:center;padding:30px;display:flex;position:fixed;inset:0}@keyframes lightbox-in{0%{opacity:0}}.lightbox-figure{max-width:min(1180px,94vw);animation:lightbox-scale .22s var(--ease);flex-direction:column;align-items:center;gap:10px;margin:0;display:flex}@keyframes lightbox-scale{0%{opacity:.4;transform:scale(.975)}}.lightbox-figure img{border-radius:12px;max-width:100%;max-height:84vh}.lightbox-figure figcaption{color:#ffffffbf;text-align:center;font-size:11px}.lightbox-close{color:#fff;background:#ffffff24;border:0;border-radius:12px;justify-content:center;align-items:center;width:44px;height:44px;display:flex;position:fixed;top:18px;right:18px}.site-header{width:100%}.header-inner{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;max-width:1240px;margin:auto;padding:26px 32px;display:flex}.wordmark{align-items:center;gap:14px;min-height:44px;display:inline-flex}.monogram{letter-spacing:-.13em;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:34px;font-weight:800;line-height:1}.monogram>span:first-child{color:var(--text-secondary);padding:0 3px;font-weight:400}.monogram .brand-dot{color:var(--primary);padding-left:4px}.wordmark-caption{letter-spacing:.13em;font-size:10px;font-weight:800;line-height:1.7}.wordmark-caption>span{color:var(--text-secondary);letter-spacing:.21em;font-weight:500}.header-right{align-items:center;gap:24px;display:flex}.theme-toggle{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:12px;justify-content:center;align-items:center;gap:8px;min-height:44px;padding:0 13px;display:inline-flex}.theme-label{font-size:12px}.dark-icon{display:none}[data-theme=dark] .dark-icon{display:inline-flex}[data-theme=dark] .light-icon{display:none}.light-icon{display:inline-flex}.portfolio-layout{grid-template-columns:355px minmax(0,1fr);align-items:start;gap:96px;max-width:1240px;margin:0 auto;padding:0 32px;display:grid}.profile-sidebar{flex-direction:column;justify-content:space-between;min-height:calc(100svh - 155px);padding:63px 0 40px;display:flex;position:sticky;top:48px}.profile-intro{width:186px;max-width:100%}.profile-photo-trigger{border-radius:16px;width:0;min-width:100%;margin:0 0 24px}.profile-photo{border:1px solid var(--border);width:100%;height:auto;box-shadow:var(--shadow);border-radius:16px;display:block}.profile-name{letter-spacing:-.055em;font-size:46px;font-weight:800;line-height:1.2}.blue-period{color:var(--primary)}.profile-english{letter-spacing:.26em;color:var(--text-secondary);margin-top:10px;font-size:11px}.social-links{align-items:center;gap:6px;margin-top:28px;display:flex}.icon-link{min-width:44px;min-height:44px;color:var(--text-secondary);border-radius:12px;justify-content:center;align-items:center;display:inline-flex;position:relative}.icon-link:after{content:attr(data-tooltip);white-space:nowrap;background:var(--tooltip-bg);color:var(--tooltip-text);opacity:0;pointer-events:none;transition:opacity .1s var(--ease);z-index:30;border-radius:8px;padding:6px 11px;font-size:11px;font-weight:600;line-height:1.5;position:absolute;top:calc(100% + 6px);left:50%;translate:-50%}.icon-link:hover:after,.icon-link:focus-visible:after{opacity:1}.tooltip-end:after{white-space:normal;width:max-content;max-width:calc(100vw - 48px);left:auto;right:0;translate:0}.section-nav{flex-direction:column;align-items:flex-start;gap:2px;margin-top:39px;display:flex}.section-nav-link{min-height:44px;color:var(--text-secondary);align-items:center;gap:12px;font-size:12px;font-weight:650;display:flex}.nav-number{opacity:.85;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10px}.nav-line{background:var(--border);width:24px;height:1px;transition:width var(--duration) var(--ease), background-color var(--duration) var(--ease)}.nav-english{letter-spacing:.1em;opacity:.75;font-size:9px}.section-nav-link[aria-current=location]{color:var(--primary)}.section-nav-link[aria-current=location] .nav-line{background:var(--primary);width:44px}.button{border:1px solid #0000;border-radius:11px;justify-content:center;align-items:center;gap:16px;min-height:46px;padding:12px 18px;font-size:12px;font-weight:650;line-height:1.5;display:inline-flex}.button-primary{background:var(--button);color:var(--button-text);border-color:var(--button)}.text-link{min-height:44px;color:var(--primary);align-items:center;gap:8px;font-size:12px;font-weight:650;display:inline-flex}.home-main{min-width:0;padding-top:62px}.home-main>section{scroll-margin-top:56px}.eyebrow{color:var(--primary);letter-spacing:.16em;align-items:center;gap:13px;font-size:10px;font-weight:750;display:flex}.eyebrow>span:first-child{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10px;font-weight:400}.section-heading{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:14px 18px;display:flex}.section-heading h2{margin-top:11px;font-size:27px;font-weight:750}.section-extra{color:var(--text-secondary);letter-spacing:.1em;flex-shrink:0;padding-bottom:3px;font-size:9px}.about-lead-heading{letter-spacing:-.04em;margin-top:22px;font-size:26px;font-weight:700;line-height:1.75}.about-lead-heading strong{color:var(--primary);font-weight:800}.strengths-label{color:var(--text-secondary);letter-spacing:.08em;margin-top:34px;font-size:11px;font-weight:700}.about-strengths{margin:6px 0 0;padding:0;list-style:none}.about-strengths>li{border-bottom:1px solid var(--border);align-items:baseline;gap:16px;padding:17px 0;display:flex}.about-strengths>li:last-child{border-bottom:0}.strength-number{color:var(--primary);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px}.about-strengths h3{font-size:16px;font-weight:700}.about-strengths li p{color:var(--text-secondary);margin-top:5px;font-size:13px;line-height:1.85}.metrics-stack{flex-direction:column;gap:12px;display:flex}.metrics-group{position:relative}.metrics-source{color:var(--text-secondary);font-size:9px;position:absolute;top:7px;right:0}.metrics-row{border-top:1px solid var(--border);grid-template-columns:1fr 1fr;gap:18px 26px;padding-top:24px;display:grid}.metrics-cols-3{grid-template-columns:repeat(3,1fr)}.metrics-cols-3 strong{font-size:24px}.metrics-note{color:var(--text-secondary);margin-top:12px;font-size:9px}.metrics-row>div{flex-direction:column;display:flex}.metrics-row strong{letter-spacing:-.055em;font-size:31px;font-weight:750;line-height:1.35}.metrics-row strong>span{font-size:18px;font-weight:500}.metrics-row>div>span{color:var(--text-secondary);margin-top:8px;font-size:11px}.metrics-row small{color:var(--text-secondary);margin-top:3px;font-size:9px}.metrics-in-card{margin-top:20px}.case-body .metrics-stack{gap:12px;margin-top:4px}.case-body .metrics-row{background:var(--surface);border-top:0;border:1px solid var(--border);border-radius:14px;padding:30px 24px 20px}.case-body .metrics-source{top:10px;right:16px}.tech-tags{flex-wrap:wrap;gap:7px;margin:18px 0 0;padding:0;list-style:none;display:flex}.tech-tags>li{color:var(--primary);background:var(--soft);border-radius:6px;padding:4px 10px;font-size:10px;font-weight:600;line-height:1.65}.projects-section{margin-top:72px}.section-intro{color:var(--text-secondary);margin-top:10px;font-size:12px}.filter-group{border:1px solid var(--border);background:var(--surface);border-radius:11px;gap:2px;padding:3px;display:inline-flex}.filter-button{min-height:38px;color:var(--text-secondary);background:0 0;border:0;border-radius:8px;align-items:center;gap:7px;padding:0 14px;font-size:12px;font-weight:650;display:inline-flex}.filter-button[aria-pressed=true]{background:var(--button);color:var(--button-text)}.filter-count{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10px}.filter-button[aria-pressed=true] .filter-count{opacity:.85}.project-list{flex-direction:column;gap:20px;margin-top:24px;display:flex}.project-list[data-filter=company]>[data-kind=personal],.project-list[data-filter=personal]>[data-kind=company]{display:none}.side-block{margin-top:10px}.mini-label{color:var(--text-secondary);letter-spacing:.05em;margin-bottom:12px;font-size:11px;font-weight:700}.project-card{border:1px solid var(--border);background:var(--surface);min-width:0;transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));transition:border-color var(--duration) var(--ease), transform var(--duration) var(--ease), translate var(--duration) var(--ease), box-shadow var(--duration) var(--ease);border-radius:18px;position:relative}.project-card:before,.project-card:after{content:"";pointer-events:none;opacity:0;transition:opacity .32s var(--ease);z-index:-1;border-radius:19px;position:absolute;inset:-1px}.project-card:after{background:radial-gradient(340px circle at var(--mx,50%) var(--my,50%), var(--sheen), transparent 62%)}.project-card:before{background:radial-gradient(260px circle at var(--mx,50%) var(--my,50%), var(--sheen-border), transparent 66%);-webkit-mask-composite:xor;padding:1px;-webkit-mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-size:auto,auto;mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.project-card.is-lit:before,.project-card.is-lit:after{opacity:1}[data-magnetic]{translate:var(--mag-x,0px) var(--mag-y,0px);transition:color var(--duration) var(--ease), background-color var(--duration) var(--ease), border-color var(--duration) var(--ease), transform var(--duration) var(--ease), translate .3s cubic-bezier(.3,1.5,.45,1)}[data-magnetic].is-magnet{transition:color var(--duration) var(--ease), background-color var(--duration) var(--ease), border-color var(--duration) var(--ease), transform var(--duration) var(--ease), translate 70ms ease-out}.project-card-body{padding:26px}.featured-project{border-color:var(--soft-border)}.ribbon-box{pointer-events:none;z-index:1;border-top-left-radius:19px;width:74px;height:74px;position:absolute;top:-1px;left:-1px;overflow:hidden}.main-ribbon{background:var(--button);width:112px;color:var(--button-text);letter-spacing:.14em;text-align:center;padding:3px 0;font-size:8px;font-weight:750;position:absolute;top:14px;left:-32px;transform:rotate(-45deg);box-shadow:0 2px 8px #14285538}.ribbon-sparkle{width:var(--size);height:var(--size);translate:calc(-50% + var(--x)) calc(-50% + var(--y));opacity:0;filter:drop-shadow(0 0 2px #ffffffe6);animation:ribbon-twinkle 3.6s var(--ease) infinite;position:absolute;top:50%;left:50%}.ribbon-sparkle:before{content:"";background:var(--button-text);clip-path:polygon(50% 0,53% 47%,100% 50%,53% 53%,50% 100%,47% 53%,0 50%,47% 47%);position:absolute;inset:0}.ribbon-sparkle:first-child{--size:16px;--x:-22px;--y:0px}.ribbon-sparkle:nth-child(2){--size:12px;--x:18px;--y:-3px;animation-delay:1.2s}.ribbon-sparkle:nth-child(3){--size:10px;--x:25px;--y:4px;animation-delay:2.4s}@keyframes ribbon-twinkle{0%,60%,to{opacity:0;transform:scale(.2)rotate(0)}70%{opacity:1;transform:scale(1)rotate(45deg)}82%{opacity:0;transform:scale(.35)rotate(90deg)}}.featured-project .project-topline{padding-left:12px}.project-topline{color:var(--text-secondary);justify-content:space-between;align-items:center;gap:10px;font-size:10px;display:flex}.project-type{align-items:center;gap:6px;font-weight:600;display:inline-flex}.featured-project .project-type{color:var(--primary)}.status-dot{background:var(--primary);border-radius:50%;width:5px;height:5px;display:inline-block}.project-period{font-size:9px}.project-title-row{justify-content:space-between;align-items:center;gap:16px;margin-top:16px;display:flex}.project-title-row h3{font-size:24px;font-weight:750}.project-title-row h3 a{display:inline-block}.project-arrow{width:21px;height:21px;color:var(--primary)}.project-arrow-link{flex:none;margin:-11px -12px -11px 0}.project-subtitle{color:var(--text-secondary);margin-top:6px;font-size:11px}.card-highlights{flex-direction:column;gap:8px;margin:20px 0 0;padding:0;list-style:none;display:flex}.card-highlights>li{align-items:flex-start;gap:9px;font-size:12px;font-weight:600;line-height:1.75;display:flex}.card-highlights svg{color:var(--excel-green);margin-top:3px}.highlights-more{color:var(--text-secondary);font-size:11px!important;font-weight:500!important}.highlights-more>span{color:var(--text-secondary);padding:0 1px}.project-summary{color:var(--text-secondary);margin-top:18px;font-size:13px;line-height:1.95}.contribution-line{align-items:baseline;gap:10px;margin-top:14px;font-size:11px;line-height:1.8;display:flex}.contribution-line>span{color:var(--text-secondary);flex-shrink:0;font-size:10px}.project-bottom{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;margin-top:21px;padding-top:10px;display:flex}.detail-button{border:1px solid var(--soft-border);background:var(--soft);min-height:44px;color:var(--primary);letter-spacing:normal;text-transform:none;transition:background-color var(--duration) var(--ease), border-color var(--duration) var(--ease);border-radius:10px;padding:8px 16px;font-family:inherit;font-size:12.96px;font-weight:650;line-height:1.4}.detail-button .MuiButton-endIcon{margin:0 0 0 10px}.detail-button svg{width:21.6px;height:21.6px;transition:transform var(--duration) var(--ease)}.approval-note{white-space:nowrap;color:var(--text-secondary);border:1px solid var(--border);border-radius:4px;flex-shrink:0;margin-left:auto;padding:3px 6px;font-size:9px}.compact-project .project-title-row h3{font-size:21px}.career-section{margin-top:72px}.career-total{color:var(--text-secondary);margin-top:8px;font-size:12px}.career-list{margin:18px 0 0;padding:0;list-style:none}.career-item{border-top:1px solid var(--border);padding:18px 0}.career-item:last-child{border-bottom:1px solid var(--border)}.career-head{flex-wrap:wrap;align-items:baseline;gap:4px 14px;display:flex}.career-head h3{letter-spacing:-.01em;font-size:15px;font-weight:750}.career-team{color:var(--text-secondary);font-size:12px}.career-period{color:var(--text-secondary);font-variant-numeric:tabular-nums;margin-left:auto;font-size:11px}.career-projects{flex-direction:column;gap:6px;margin:10px 0 0;padding:0;list-style:none;display:flex}.career-projects li{flex-wrap:wrap;align-items:baseline;gap:2px 12px;padding-left:14px;font-size:13px;display:flex;position:relative}.career-projects li:before{content:"";background:var(--primary);opacity:.55;border-radius:50%;width:5px;height:5px;position:absolute;top:.72em;left:0}.career-projects a{color:var(--text);text-decoration:none}.career-projects a:hover{color:var(--primary)}.career-project-period{color:var(--text-secondary);font-variant-numeric:tabular-nums;font-size:11px}.skills-section{margin-top:72px}.sub-section-title{margin-top:11px;font-size:27px;font-weight:750}.mini-grid{grid-template-columns:repeat(3,1fr);gap:16px;margin-top:24px;display:grid}.mini-card{border:1px solid var(--border);background:var(--surface);min-width:0;transition:border-color var(--duration) var(--ease);border-radius:14px;flex-direction:column;gap:10px;padding:14px 14px 16px;display:flex}.mini-card:hover{border-color:var(--primary)}.mini-thumb{aspect-ratio:16/10;border:1px solid var(--border);background:var(--soft);border-radius:9px;overflow:hidden}.mini-thumb img,.mini-thumb video{object-fit:cover;object-position:top;width:100%;height:100%;display:block}.mini-card h3{font-size:15px;font-weight:700}.mini-card p{color:var(--text-secondary);flex:1;margin:0;font-size:12px;line-height:1.8}.mini-card .tech-tags{margin-top:0}.mini-links{gap:14px;display:flex}.mini-links .text-link{min-height:36px;font-size:11px}.skill-groups{grid-template-columns:1fr 1fr;gap:4px 30px;margin-top:6px;display:grid}.skill-group h3{letter-spacing:.06em;color:var(--text-secondary);margin-top:18px;font-size:11px;font-weight:700}.skill-group .tech-tags{margin-top:10px}.cert-list{margin:10px 0 0;padding-left:17px}.cert-list li{color:var(--text-secondary);margin-top:3px;font-size:12px;line-height:1.9}.cert-list li::marker{color:var(--border)}.resume-page .case-header{margin-top:40px}.resume-lead{max-width:760px}.resume-page .about-strengths{max-width:760px;margin-top:6px}.resume-body-wrap{max-width:900px;margin-top:56px}.resume-body-wrap>section{margin-bottom:56px}.resume-row{border-bottom:1px solid var(--border);grid-template-columns:170px minmax(0,1fr);gap:26px;padding:24px 0;display:grid}.resume-row:last-of-type{border-bottom:0}.resume-side{flex-direction:column;gap:5px;display:flex}.resume-period{color:var(--primary);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px}.resume-duration,.resume-team,.resume-note{color:var(--text-secondary);font-size:11px}.resume-body h3{flex-wrap:wrap;align-items:baseline;gap:10px;margin:0;font-size:17px;font-weight:750;display:flex}.resume-project{border-top:1px dashed var(--border);margin-top:20px;padding-top:18px}.resume-project h4{flex-wrap:wrap;align-items:baseline;gap:10px;margin:0;font-size:14px;font-weight:700;display:flex}.resume-project h4>span{color:var(--text-secondary);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10px;font-weight:400}.resume-meta{gap:9px;display:flex;margin-top:9px!important;font-size:12px!important;line-height:1.85!important}.resume-meta strong{color:var(--primary);flex-shrink:0;padding-top:3px;font-size:10px;font-weight:700}.resume-project .qa-list{margin-top:8px}.resume-stack{color:var(--text-secondary);margin-top:10px!important;font-size:11px!important}.resume-row-slim{padding:14px 0}.resume-row-slim h3{font-size:14px}.resume-row-slim .resume-note{margin-top:3px}.mini-thumb:focus-visible{outline-offset:2px}.card-hero{border:1px solid var(--border);background:var(--soft);border-radius:11px;margin-top:22px;overflow:hidden}.card-hero img,.card-hero video{width:100%;height:auto;display:block}.card-hero-link{border-radius:11px;display:block}.card-hero-link:focus-visible{outline-offset:2px}.card-diagram{border:1px solid var(--border);background:var(--surface);border-radius:11px;margin-top:22px;overflow:hidden}.card-diagram svg{width:100%;height:auto;font-family:var(--font-sans);display:block}.stock-figure{min-width:0;margin:22px 0 0}.stock-visual{color:#24334a;background:#e9f0fd;border:1px solid #dce6f7;border-radius:11px;padding:16px 16px 0;overflow:hidden}.browser-chrome{background:#fff;border:1px solid #d9e1ef;border-bottom:0;border-radius:7px 7px 0 0;justify-content:space-between;align-items:center;gap:12px;padding:9px 13px;display:flex}.window-dots{gap:4px;display:flex}.window-dots i{background:#b3c0d4;border-radius:50%;width:4px;height:4px}.address-bar{text-align:center;color:#64748b;flex:1;font-size:8px;line-height:1.5}.window-mark{color:#60728b;font-size:10px}.mock-ribbon{color:#fff;background:#2055b4;align-items:center;gap:10px;padding:9px 12px;display:flex}.mock-logo{align-items:center;gap:8px;font-size:13px;font-weight:850;line-height:1.5;display:flex}.mock-logo>span{font-size:9px;font-weight:700}.mock-view-label{letter-spacing:.06em;opacity:.85;margin-left:auto;font-size:6px}.mock-status{color:#fff;border:1px solid #779adb;border-radius:3px;padding:1px 5px;font-size:6px}.mock-formula{color:#5a6a82;background:#f2f5fa;border-bottom:1px solid #dfe6ef;align-items:center;gap:12px;padding:5px 12px;font-size:7px;display:flex}.mock-formula>span:first-child{border-right:1px solid #d4dfec;padding-right:12px}.mock-formula>span:nth-child(2){font-style:italic}.mock-main{background:#fff;grid-template-columns:1fr 1fr;min-height:136px;display:grid}.mock-table{border-right:1px solid #dfe6ef}.mock-table-head,.mock-row{border-bottom:1px solid #edf0f5;grid-template-columns:1.05fr 1fr .75fr;align-items:center;gap:5px;padding:7px 8px;font-size:7px;line-height:1.2;display:grid}.mock-table-head{color:#657389;background:#f8fafc;font-size:6px}.mock-table-head>span:not(:first-child),.mock-row>span:not(:first-child){text-align:right}.mock-row>span:first-child{align-items:center;gap:7px;display:flex}.row-index{color:#6d7d94;font-size:6px;font-style:normal}.mock-row.selected{background:#eff5ff;box-shadow:inset 2px 0 #2563eb}.blue-value{color:#2055b4}.muted-value{color:#64748b}.mock-chart{min-width:0;padding:11px 12px 0}.mock-chart-title{justify-content:space-between;align-items:center;gap:5px;font-size:7px;font-weight:700;display:flex}.mock-chart-title>span:last-child{color:#65748b;font-size:6px;font-weight:400}.mock-chart svg{width:100%;height:81px;margin-top:8px;display:block;overflow:visible}.chart-grid{stroke:#e8edf5;stroke-width:.9px}.chart-line{stroke:#2563eb;stroke-width:2px;stroke-linejoin:round;stroke-linecap:round}.chart-area{fill:#2563eb;opacity:.065}.mock-feed{color:#65748b;align-items:center;gap:5px;margin-top:7px;font-size:6px;display:flex}.feed-dot{background:#2563eb;border-radius:50%;width:3px;height:3px}.mock-tabs{background:#f8fafc;border-top:1px solid #e3e8f0;align-items:center;gap:16px;padding:7px 11px;font-size:6px;display:flex}.mock-tabs>.selected{color:#2563eb;border-bottom:2px solid #2563eb;font-weight:700}.mock-tabs-end{color:#65748b;margin-left:auto}.stock-figure figcaption{color:var(--text-secondary);text-align:right;margin-top:8px;font-size:9px;line-height:1.6}[data-theme=dark] .stock-visual{background:#192b4b;border-color:#30466a}[data-theme=dark] .browser-chrome{background:#202f47;border-color:#354860}[data-theme=dark] .address-bar,[data-theme=dark] .window-mark{color:#bccae0}[data-theme=dark] .mock-main{color:#d5e2f4;background:#18243a}[data-theme=dark] .mock-table-head,[data-theme=dark] .mock-formula,[data-theme=dark] .mock-tabs{color:#b4c3da;background:#202f47;border-color:#34445e}[data-theme=dark] .mock-table-head{color:#bac8db}[data-theme=dark] .mock-row,[data-theme=dark] .mock-table{border-color:#2a3b55}[data-theme=dark] .mock-row.selected{background:#243758;box-shadow:inset 2px 0 #60a5fa}[data-theme=dark] .blue-value,[data-theme=dark] .mock-tabs>.selected{color:#7fb7ff}[data-theme=dark] .muted-value,[data-theme=dark] .mock-chart-title>span:last-child,[data-theme=dark] .row-index,[data-theme=dark] .mock-feed,[data-theme=dark] .mock-tabs-end{color:#b4c3da}[data-theme=dark] .chart-grid{stroke:#2a3d5b}[data-theme=dark] .chart-line{stroke:#60a5fa}[data-theme=dark] .chart-area{fill:#60a5fa;opacity:.13}.contact-section{border-top:1px solid var(--border);margin-top:70px;padding-top:40px}.contact-section h2{margin-top:19px;font-size:31px;line-height:1.6}.contact-section>p:not(.eyebrow){color:var(--text-secondary);margin-top:16px;font-size:14px;line-height:1.9}.contact-actions{flex-wrap:wrap;align-items:center;gap:22px;margin-top:25px;display:flex}.contact-section .contact-note,.contact-section .contact-address{margin-top:12px!important;font-size:10px!important}.site-footer{border-top:1px solid var(--border);color:var(--text-secondary);justify-content:space-between;align-items:center;gap:12px;margin-top:55px;margin-bottom:28px;padding-top:21px;padding-bottom:16px;font-size:9px;display:flex}.site-footer>span:first-child{letter-spacing:.07em}.site-footer a{align-items:center;min-height:44px;display:inline-flex}.case-layout{max-width:1120px;margin:auto;padding:0 32px 64px}.case-topbar{justify-content:space-between;align-items:center;gap:18px;padding-top:32px;display:flex}.case-kind{color:var(--text-secondary);letter-spacing:.1em;font-size:9px}.case-header{margin-top:40px}.case-header h1{margin-top:17px;font-size:57px;line-height:1.35}.case-subtitle{letter-spacing:-.035em;margin-top:16px;font-size:22px;font-weight:500}.case-lead{max-width:710px;color:var(--text-secondary);margin-top:22px;font-size:15px;line-height:1.95}.case-title-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 24px;margin-top:17px;display:flex}.case-title-row h1{margin-top:0}.case-screens-cta{margin-top:22px}.case-cta{flex-wrap:wrap;align-items:center;gap:12px 22px;display:flex}.eyebrow-separator{color:var(--border)}.case-meta{border-top:1px solid var(--border);border-bottom:1px solid var(--border);align-items:center;gap:40px;margin-top:29px;padding:25px 0;display:flex}.case-meta>div{flex-direction:column;gap:6px;display:flex}.case-meta>div>span{color:var(--text-secondary);font-size:10px}.case-meta strong{font-size:12px;font-weight:600}.case-meta .case-links{flex-direction:row;align-items:center;gap:20px;margin-left:auto}.case-meta-detailed{grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:22px 32px;display:grid}.case-meta-detailed strong{line-height:1.6}.case-layout>.stock-figure{margin-top:34px}.is-large .stock-visual{border-radius:18px;padding:35px 52px 0}.is-large .browser-chrome{padding:13px 20px}.is-large .window-dots i{width:6px;height:6px}.is-large .address-bar{font-size:11px}.is-large .mock-ribbon{padding:15px 22px}.is-large .mock-logo{font-size:22px}.is-large .mock-logo>span{font-size:14px}.is-large .mock-view-label{font-size:9px}.is-large .mock-status{padding:2px 8px;font-size:9px}.is-large .mock-formula{padding:9px 22px;font-size:10px}.is-large .mock-table-head,.is-large .mock-row{padding:11px 20px;font-size:12px}.is-large .mock-table-head{font-size:10px}.is-large .row-index{font-size:9px}.is-large .mock-chart{padding:18px 23px 0}.is-large .mock-chart-title{font-size:12px}.is-large .mock-chart-title>span:last-child{font-size:9px}.is-large .mock-chart svg{height:153px;margin-top:15px}.is-large .mock-feed{font-size:9px}.is-large .mock-tabs{gap:25px;padding:12px 22px;font-size:9px}.case-body-grid{grid-template-columns:190px minmax(0,1fr);align-items:start;gap:74px;margin-top:65px;display:grid}.case-toc{overscroll-behavior:contain;flex-direction:column;align-items:flex-start;max-height:calc(100vh - 70px);padding-top:6px;display:flex;position:sticky;top:46px;overflow-y:auto}.case-toc>span{color:var(--text-secondary);letter-spacing:.12em;margin-bottom:19px;font-size:9px}.case-toc>a{min-height:44px;color:var(--text-secondary);transition:color var(--duration) var(--ease);align-items:center;font-size:11px;display:inline-flex}.case-toc>a[aria-current=location]{color:var(--text);font-weight:700}.case-toc-sub{border-left:1px solid var(--border);flex-direction:column;align-items:flex-start;margin:-6px 0 6px 6px;padding-left:12px;display:flex}.case-toc-sub>a{min-height:30px;color:var(--text-secondary);transition:color var(--duration) var(--ease);align-items:center;font-size:10.5px;line-height:1.5;display:inline-flex}.case-toc-sub>a[aria-current=location]{color:var(--text);font-weight:700}.case-toc-site{border-top:1px solid var(--border);flex-direction:column;align-items:flex-start;width:100%;margin-top:14px;padding-top:18px;display:flex}.case-toc-site>span{color:var(--text-secondary);letter-spacing:.12em;font-size:9px}.case-toc-site>a{min-height:44px;color:var(--primary);align-items:center;gap:6px;font-size:11px;font-weight:600;display:inline-flex}.case-body{min-width:0}.case-body>section{margin-bottom:58px;scroll-margin-top:46px}.case-body>section:focus,.feature-block:focus,.home-main>section:focus,main:focus{outline:none}.case-body h2{margin-top:15px;margin-bottom:23px;font-size:28px}.case-body h3{margin-top:24px;margin-bottom:13px;font-size:18px;font-weight:650}.case-body p{color:var(--text-secondary);margin-top:12px;font-size:15px;line-height:2}.case-body .eyebrow{color:var(--primary);margin-top:0;font-size:10px;line-height:1.75}.case-body .section-preface{margin-top:-9px}.feature-block{border-top:1px solid var(--border);margin-top:27px;padding-top:22px;scroll-margin-top:46px}.feature-heading{align-items:center;gap:14px;display:flex}.feature-heading>span{color:var(--primary);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px}.feature-heading>h3{margin:0}.qa-group{margin-top:21px}.qa-label{color:var(--primary);letter-spacing:.01em;align-items:center;gap:8px;margin:0;font-size:12px;font-weight:700;display:flex}.qa-label:before{content:"";background:var(--primary);border-radius:50%;width:5px;height:5px}.qa-result .qa-label{color:var(--text)}.qa-result .qa-label:before{background:var(--text-secondary)}.qa-list{margin:9px 0 0;padding-left:19px}.qa-list>li{color:var(--text-secondary);margin-top:7px;font-size:14px;line-height:1.95}.qa-list>li::marker{color:var(--text-secondary)}.qa-result .qa-list>li{color:var(--text)}.case-figure{min-width:0;margin:26px 0 0}.case-figure img{border:1px solid var(--border);border-radius:12px;width:100%;height:auto;display:block}.case-figure figcaption{color:var(--text-secondary);margin-top:8px;font-size:10px}.case-hero{max-width:1120px;margin:34px auto 0}.case-gallery{flex-direction:column;gap:10px;display:flex}.image-placeholder{text-align:center;border:1px dashed var(--border);background:var(--surface);color:var(--text-secondary);border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:7px;padding:24px;display:flex}.image-placeholder strong{color:var(--text);font-size:12px}.image-placeholder code{color:var(--primary);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px}.image-placeholder span{font-size:10px}.diagram-figure{min-width:0;margin:24px 0 0}.diagram-scroll{border:1px solid var(--border);background:var(--surface);border-radius:14px;overflow-x:auto}.diagram-scroll svg{width:100%;min-width:640px;height:auto;font-family:var(--font-sans);display:block}.diagram-figure figcaption{color:var(--text-secondary);margin-top:8px;font-size:10px}.dg-box{fill:var(--background);stroke:var(--border);stroke-width:1.2px}.dg-box-accent{stroke:var(--primary);stroke-width:1.5px}.dg-title{fill:var(--text);font-size:13px;font-weight:700}.dg-line{fill:var(--text-secondary);font-size:11px}.dg-sub{fill:var(--text-secondary);font-size:10px}.dg-arrow{fill:none;stroke:var(--text-secondary);stroke-width:1.4px}.dg-arrow-dashed{stroke-dasharray:5 4}.dg-arrow-head{fill:var(--text-secondary)}.dg-arrow-accent{stroke:var(--primary);stroke-width:2px}.dg-arrow-head-accent{fill:var(--primary)}.dg-decision{fill:var(--soft);stroke:var(--soft-border);stroke-width:1.2px}.dg-node-text{fill:var(--text);font-size:12px;font-weight:600}.dg-node-sub{fill:var(--text-secondary);font-size:10.5px}.dg-edge-label{fill:var(--text-secondary);font-size:10px;font-weight:600}.dg-error{fill:color-mix(in srgb, var(--danger) 7%, var(--surface));stroke:color-mix(in srgb, var(--danger) 35%, transparent)}.dg-success{fill:color-mix(in srgb, var(--success) 9%, var(--surface));stroke:color-mix(in srgb, var(--success) 40%, transparent)}.dg-error-code{fill:var(--danger);font-size:11.5px;font-weight:700}.dg-success-code{fill:var(--success);font-size:11.5px;font-weight:700}.dg-result-text{fill:var(--text);font-size:11.5px}.dg-terminal{fill:var(--surface);stroke:var(--text-secondary);stroke-width:1.2px}.dg-store{fill:var(--soft);stroke:var(--soft-border);stroke-width:1.2px}.dg-store-rim{fill:none;stroke:var(--soft-border);stroke-width:1.2px}.dg-store-text{fill:var(--text);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10.5px;font-weight:600}.dg-group{fill:color-mix(in srgb, var(--soft) 35%, transparent);stroke:var(--border);stroke-dasharray:5 4}.dg-arrow-label-accent{fill:var(--primary);font-weight:700}.dg-arrow-label{fill:var(--text-secondary);font-size:10px}.dg-badge{fill:var(--button)}.dg-badge-text{fill:var(--button-text);font-size:11px;font-weight:700}.next-project{background:var(--footer);border:1px solid var(--border);color:var(--footer-strong);border-radius:14px;justify-content:space-between;align-items:center;gap:24px;padding:26px;display:flex}.next-project>span{color:var(--footer-text);flex-direction:column;gap:8px;font-size:10px;display:flex}.next-project strong{color:var(--footer-strong);font-size:20px;font-weight:650}.empty-page{max-width:1000px;margin:auto;padding:90px 32px}.empty-page h1{margin:20px 0;font-size:36px}.empty-page>p{color:var(--text-secondary)}.empty-page>a{margin-top:25px}@media (hover:hover) and (pointer:fine){.button-primary:hover{background:var(--button-hover);border-color:var(--button-hover);transform:translateY(-1px)}.text-link:hover{color:var(--primary-hover)}.text-link:hover svg{transform:translate(2px)}.detail-button:hover{background:color-mix(in srgb, var(--primary) 12%, var(--surface));border-color:var(--primary)}.detail-button:hover svg{transform:translate(2px)}.theme-toggle:hover{border-color:var(--primary);background:var(--soft)}.icon-link:hover{color:var(--primary);background:var(--soft)}.filter-button:not([aria-pressed=true]):hover{color:var(--primary)}.lightbox-close:hover{background:#ffffff3d}.project-card:hover{border-color:var(--primary);box-shadow:var(--shadow);translate:0 -2px}.project-title-row a:hover,.section-nav-link:hover{color:var(--primary)}.section-nav-link:hover .nav-line{background:var(--primary);width:44px}.case-toc a:hover,.site-footer a:hover{color:var(--primary)}.case-toc-site>a:hover{color:var(--primary-hover)}.mini-card h3 a:hover{color:var(--primary)}.next-project:hover{transform:translateY(-2px)}}.button:active,.theme-toggle:active{transform:scale(.985)}.project-card:focus-within{border-color:var(--primary)}@media (max-width:1100px){.portfolio-layout{grid-template-columns:295px minmax(0,1fr);gap:56px}.profile-name{font-size:42px}.about-lead-heading{font-size:23px}.project-card-body{padding:23px}.stock-visual{padding:12px 10px 0}.mock-view-label{display:none}.mock-status{margin-left:auto}.case-body-grid{grid-template-columns:170px minmax(0,1fr);gap:42px}}@media (max-width:820px){.site-header{z-index:10;background:var(--background);position:sticky;top:0}.case-body>section,.feature-block{scroll-margin-top:88px}.case-toc{max-height:none;overflow:visible}.header-inner{padding:15px 25px}.portfolio-layout{max-width:720px;padding:0 28px;display:block}.profile-sidebar{min-height:auto;padding:44px 0 0;position:static}.profile-top{position:relative}.profile-photo,.profile-photo-trigger{border-radius:14px}.profile-photo-trigger{margin-bottom:20px}.profile-name{font-size:44px}.section-nav{flex-direction:row;justify-content:flex-start;align-items:center;gap:25px;margin-top:24px}.section-nav-link{gap:7px}.nav-line,.nav-english{display:none}.social-links{margin-top:8px}.home-main{padding-top:44px}.about-section{border-top:1px solid var(--border);padding-top:36px}.home-main>section{scroll-margin-top:96px}.about-lead-heading{font-size:22px}.projects-section{margin-top:58px}.career-section,.skills-section{margin-top:56px}.career-period{width:100%;margin-left:0}.mini-grid{grid-template-columns:1fr 1fr}.resume-row{grid-template-columns:1fr;gap:10px;padding:18px 0}.resume-side{flex-direction:row;align-items:baseline;gap:12px}.case-layout{padding:0 28px}.case-header h1{font-size:44px}.case-header{margin-top:26px}.case-body-grid{margin-top:40px;display:block}.case-toc{border-bottom:1px solid var(--border);flex-flow:wrap;gap:2px 22px;margin-bottom:35px;padding-bottom:25px;position:static}.case-toc>span{width:100%;margin-bottom:9px}.case-meta{flex-wrap:wrap;gap:25px}.case-meta-detailed{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px}.case-meta .case-links{margin-left:0}.is-large .stock-visual{padding:22px 22px 0}.is-large .mock-table-head,.is-large .mock-row{padding:9px 13px;font-size:10px}.is-large .mock-chart svg{height:114px}.is-large .mock-chart{padding:13px 14px 0}.is-large .mock-chart-title{font-size:10px}.is-large .mock-logo>span{font-size:12px}.case-body>section,.feature-block{scroll-margin-top:101px}.case-toc-sub{display:none}}@media (max-width:480px){.metrics-source,.case-body .metrics-source{text-align:right;margin-bottom:6px;display:block;position:static}.header-inner{padding:13px 22px}.monogram{font-size:30px}.wordmark-caption{font-size:9px}.theme-toggle{min-height:44px;padding:0 12px}.theme-label{display:none}.portfolio-layout{padding:0 23px}.profile-name{font-size:40px}.profile-photo,.profile-photo-trigger{border-radius:12px}.lightbox{padding:16px}.lightbox-close{top:12px;right:12px}.about-lead-heading{font-size:19px}.about-strengths h3{font-size:15px}.about-strengths li p{font-size:12px}.metrics-row{gap:14px 16px}.metrics-row strong{font-size:26px}.metrics-cols-3 strong{font-size:19px}.metrics-row>div>span{font-size:10px}.metrics-row small{font-size:8px}.section-heading h2{font-size:25px}.section-extra{font-size:8px}.project-list{gap:16px}.project-card-body{padding:20px}.project-title-row h3{font-size:23px}.compact-project .project-title-row h3{font-size:20px}.project-subtitle{font-size:10px}.project-summary{font-size:12px}.project-bottom{gap:8px}.detail-button{padding:7px 13px;font-size:10.8px}.detail-button svg{width:18px;height:18px}.approval-note{font-size:8px}.contribution-line{font-size:10px}.stock-visual{padding:10px 8px 0}.mock-main{grid-template-columns:1.06fr .94fr;min-height:auto}.mock-row,.mock-table-head{gap:3px;padding:7px 5px;font-size:6px}.mock-row>span:first-child{gap:3px}.row-index{display:none}.mock-chart{padding:9px 7px 0}.mock-chart-title{font-size:6px}.mock-chart-title>span:last-child{display:none}.mock-chart svg{height:76px}.mock-feed{margin-top:5px;font-size:5px}.mock-ribbon{padding:8px}.mock-formula{gap:8px;padding:5px 8px;font-size:6px}.mock-tabs{gap:11px;padding:7px;font-size:5px}.mock-tabs-end{font-size:5px}.stock-figure figcaption{font-size:8px}.tech-tags{gap:6px}.tech-tags>li{padding:4px 8px;font-size:9px}.section-nav{gap:16px}.mini-grid{grid-template-columns:1fr}.skill-groups{grid-template-columns:1fr;gap:0}.sub-section-title{font-size:25px}.contact-section h2{font-size:27px}.contact-section>p:not(.eyebrow){font-size:13px}.site-footer{flex-wrap:wrap;gap:4px 12px;font-size:8px}.site-footer>span:nth-child(2){display:none}.case-layout{padding:0 22px}.case-kind{display:none}.case-header h1{font-size:35px}.case-subtitle{font-size:18px}.case-lead{font-size:13px}.case-header .eyebrow{font-size:9px}.case-meta{gap:20px}.case-meta-detailed{grid-template-columns:minmax(0,1fr);gap:14px}.case-meta strong{font-size:11px}.case-meta .case-links{width:100%}.is-large .stock-visual{padding:12px 10px 0}.is-large .browser-chrome{padding:9px 13px}.is-large .address-bar{font-size:8px}.is-large .mock-ribbon{padding:9px 11px}.is-large .mock-logo{font-size:16px}.is-large .mock-logo>span{font-size:9px}.is-large .mock-status{font-size:6px}.is-large .mock-formula{padding:6px 10px;font-size:7px}.is-large .mock-table-head,.is-large .mock-row{padding:8px 7px;font-size:7px}.is-large .mock-chart{padding:11px 10px 0}.is-large .mock-chart svg{height:90px;margin-top:7px}.is-large .mock-chart-title{font-size:8px}.is-large .mock-feed{font-size:6px}.is-large .mock-tabs{padding:9px 11px;font-size:7px}.case-body h2{font-size:24px}.case-body p{font-size:14px}.feature-heading h3{font-size:16px}.qa-list{padding-left:17px}.qa-list>li{font-size:13px}.qa-label{font-size:11px}.case-body .metrics-row{padding:16px 17px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}.button:active,.theme-toggle:active,.project-card:hover,.button-primary:hover,.next-project:hover{transform:none}[data-tilt-card]{transform:none!important}.project-card:hover{translate:0}[data-magnetic]{translate:0!important}.project-card:before,.project-card:after{display:none}}@media (forced-colors:active){.ribbon-sparkle{display:none}.button,.tech-tags>li,.theme-toggle,.project-card,.diagram-scroll,.image-placeholder,.lightbox-close{border:1px solid buttontext}.nav-line,.status-dot{background:linktext}}@media print{.site-header,.profile-sidebar,.case-toc,.skip-link,.contact-actions,.next-project{display:none!important}body{color:#17202d;background:#fff;font-size:11pt}.portfolio-layout,.case-layout{max-width:none;padding:0;display:block}.home-main{padding:0}.case-body-grid{margin-top:24px;display:block}.project-card,.feature-block{break-inside:avoid}.stock-visual{-webkit-print-color-adjust:exact;print-color-adjust:exact}}.site-footer{background:var(--footer);color:var(--footer-text);border:1px solid var(--border);border-radius:10px;padding:12px 18px}
