@import"https://fonts.googleapis.com/css2?family=Schibsted+Grotesk:wght@400;600;700&family=Source+Sans+3:wght@400;600;700&display=swap";.about-shell{--muted: #526075;--accent: #1d4ed8;--accent-strong: #1e40af;min-height:100vh;position:relative;isolation:isolate;background:var(--page)}.dark .about-shell{--muted: #e0e0e0;--accent: #60a5fa;--accent-strong: #93c5fd}.about-header{position:fixed;inset:0 0 auto;z-index:50;display:flex;height:64px;align-items:center;justify-content:space-between;padding:0 max(1rem,calc((100vw - 80rem)/2 + 1rem));border-bottom:1px solid rgb(0 0 0 / .05);background:#ffffffb3;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.dark .about-header{border-bottom-color:#ffffff0d;background:#18181bcc}.about-scroll-progress{position:fixed;inset:64px 0 auto;z-index:51;height:4px;overflow:hidden;pointer-events:none}.about-scroll-progress span{display:block;width:100%;height:100%;transform-origin:left;background:#3b82f6}.about-rss-link{display:inline-flex;min-height:40px;align-items:center;gap:.4rem;padding:0 .65rem;border-radius:.5rem;color:var(--muted);font-size:.82rem}.about-rss-link:hover,.about-header .icon-button:hover,.about-header .control-button:hover{background:#0000000d;color:var(--text)}.dark .about-rss-link:hover,.dark .about-header .icon-button:hover,.dark .about-header .control-button:hover{background:#ffffff1a}.about-header .control-button{min-height:40px;padding:0 .65rem;font-size:.82rem}.about-header .control-button svg{display:none}.header-controls{display:flex;align-items:center;gap:.2rem}.about-shell .about-content{position:relative;z-index:1;width:100%;max-width:none;overflow-x:clip;margin:0 auto;padding:16rem 4rem 8rem 3rem}.about-page{position:relative;display:grid;grid-template-columns:minmax(0,1fr);gap:8rem}.about-page>section{min-width:0;animation:about-section-enter .5s ease both}.about-page>section:nth-of-type(2){animation-delay:.08s}.about-page>section:nth-of-type(3){animation-delay:.16s}.about-page>section:nth-of-type(4){animation-delay:.24s}.about-page>section:nth-of-type(5){animation-delay:.32s}.about-page>section:nth-of-type(6){animation-delay:.4s}@keyframes about-section-enter{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}.about-background{position:fixed;z-index:0;inset:0;overflow:hidden;pointer-events:none}.about-orb{position:absolute;width:500px;height:500px;border-radius:999px;filter:blur(64px)}.about-orb-blue{top:-12rem;right:-12rem;background:#3b82f61a}.about-orb-purple{bottom:-12rem;left:-12rem;background:#a855f71a}.about-glass-card{border:1px solid rgb(0 0 0 / .05);border-radius:.75rem;background:#00000005;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.dark .about-glass-card{border-color:#ffffff0d;background:#ffffff05}.about-intro{position:relative;display:flex;width:90%;min-height:22.75rem;align-items:flex-start;gap:2rem;margin-left:10%;padding:2rem;overflow:hidden}.about-intro:after{position:absolute;top:-6rem;right:-6rem;width:16rem;height:16rem;border-radius:999px;background:linear-gradient(135deg,#3b82f61a,#a855f71a);content:"";filter:blur(48px)}.about-portrait-wrap{position:relative;z-index:1;flex:0 0 auto}.about-portrait-wrap img{width:160px;height:160px;border:2px solid rgb(0 0 0 / .05);border-radius:1rem;object-fit:cover}.dark .about-portrait-wrap img{border-color:#ffffff0d}.about-portrait-badge{position:absolute;right:-.75rem;bottom:-.75rem;display:grid;width:36px;height:36px;place-items:center;border-radius:.5rem;background:#3b82f6;color:#fff;box-shadow:0 10px 15px -3px #00000024}.about-intro-copy{position:relative;z-index:1;flex:1;min-width:0}.about-role>div{min-width:0}.about-role p{overflow-wrap:anywhere}.about-intro h1,.about-gradient-title{display:inline-block;background:linear-gradient(90deg,#3b82f6,#a855f7);color:transparent;font-size:2.25rem;line-height:1.12;letter-spacing:-.025em;-webkit-background-clip:text;background-clip:text}.about-subtitle{margin-top:.5rem;color:var(--muted);line-height:1.5}.about-role-list{display:grid;gap:1rem;margin-top:1.5rem}.about-role{display:flex;align-items:flex-start;gap:.75rem}.about-role-icon{display:grid;width:34px;height:34px;flex:0 0 auto;place-items:center;border-radius:.5rem;background:#3b82f61a;color:#3b82f6}.about-role-1 .about-role-icon{background:#a855f71a;color:#a855f7}.about-role-2 .about-role-icon{background:#22c55e1a;color:#22c55e}.about-role h2{font-size:.95rem;font-weight:500;line-height:1.25}.about-role p{margin-top:.18rem;color:var(--muted);font-size:.875rem;line-height:1.4}.about-section{display:grid;gap:2rem}.about-skills-section{padding:2rem}.about-skills-section>.about-gradient-title,.about-github-section>.about-gradient-title{justify-self:center}.skill-categories{display:grid;gap:2rem}.skill-categories h3{margin:0 0 1rem;font-size:1.45rem;font-weight:600}.skills-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-flow:column;grid-template-rows:repeat(4,minmax(0,1fr));gap:1rem 1.5rem}.skill-categories>section:nth-child(2) .skills-grid{grid-template-rows:repeat(5,minmax(0,1fr))}.skill{display:grid;grid-template-columns:minmax(80px,100px) minmax(0,1fr) 40px;align-items:center;gap:.5rem;font-size:.875rem}.skill>div:first-child{display:contents}.skill>div:first-child span:first-child{grid-column:1}.skill>div:first-child span:last-child{grid-column:3;grid-row:1;text-align:right}.skill-track{grid-column:2;grid-row:1;overflow:hidden;height:.5rem;border-radius:999px;background:#0000000d}.dark .skill-track{background:#ffffff0d}.skill-track span{display:block;height:100%;border-radius:inherit;background:#3b82f6}.about-github-section{width:90%;justify-self:center;padding:2rem}.about-github-section .github-panel{padding:0;border:0;background:transparent}.github-panel{padding:1.5rem;border:1px solid var(--border);border-radius:.8rem;background:var(--surface-soft)}.github-summary{display:flex;align-items:baseline;gap:.6rem;margin-bottom:1rem}.github-summary strong{font-size:1.75rem}.github-summary span{color:var(--muted);font-size:.85rem}.stale-badge{padding:.2rem .45rem;border-radius:999px;background:#f59e0b22;color:#d97706!important}.calendar-scroll{overflow-x:auto;padding-bottom:.35rem}.contribution-grid{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,10px);grid-auto-columns:10px;gap:3px;width:max-content;padding:.25rem 0}.contribution{width:10px;height:10px;padding:0;border:0;border-radius:2px;background:#d1d5db}.contribution-grid button.contribution{cursor:pointer}.contribution-grid button.contribution:focus-visible{z-index:1;outline:2px solid var(--accent);outline-offset:2px}.contribution.level-1{background:#9be9a8}.contribution.level-2{background:#40c463}.contribution.level-3{background:#30a14e}.contribution.level-4{background:#216e39}.dark .contribution{background:#27272a}.dark .contribution.level-1{background:#546fc5}.dark .contribution.level-2{background:#485eb0}.dark .contribution.level-3{background:#394c97}.dark .contribution.level-4{background:#2d3b7d}.calendar-months{display:grid;grid-template-columns:repeat(53,10px);gap:3px;width:max-content;min-height:1rem;margin-top:.4rem;color:var(--muted);font-size:.68rem;line-height:1;white-space:nowrap}.github-calendar-footer{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--border)}.snapshot-status{margin:0;color:var(--muted);font-size:.78rem}.contribution-legend,.legend-cells{display:inline-flex;flex:0 0 auto;align-items:center;gap:3px}.contribution-legend{color:var(--muted);font-size:.7rem}.contribution-tooltip{position:fixed;z-index:100;max-width:min(18rem,calc(100vw - 2rem));padding:.45rem .6rem;border:1px solid var(--border);border-radius:.45rem;background:var(--text);color:var(--page);box-shadow:var(--shadow);font-size:.75rem;line-height:1.3;pointer-events:none;transform:translate(-50%,calc(-100% - 8px))}.about-section-heading{display:flex;align-items:end;justify-content:space-between;gap:1rem}.about-section-heading>a{display:inline-flex;align-items:center;gap:.4rem;color:var(--muted);font-size:.82rem}.about-section-heading>a:hover{color:#3b82f6}.about-projects-section{width:90%;justify-self:center}.about-project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem}.about-project-grid article{overflow:hidden;border:1px solid rgb(0 0 0 / .05);border-radius:.75rem;background:#ffffff80;box-shadow:0 10px 15px -3px #00000014,0 4px 6px -4px #00000014;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);transition:box-shadow .3s ease,background-color .3s ease}.dark .about-project-grid article{border-color:#ffffff0d;background:#18181be6}.about-project-grid article:hover{background:#fff9;box-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a}.dark .about-project-grid article:hover{background:#18181b}.project-media{position:relative;height:200px;overflow:hidden}.about-project-grid .project-media img{width:100%;height:100%;object-fit:cover;transition:transform .5s ease}.about-project-grid article:hover .project-media img{transform:scale(1.1)}.project-image-shade{position:absolute;inset:0;background:linear-gradient(to bottom,transparent 65%,rgb(24 24 27 / .9))}.project-quick-actions{position:absolute;top:1rem;right:1rem;display:flex;gap:.5rem}.project-quick-actions a{display:grid;width:32px;height:32px;place-items:center;border-radius:.5rem;background:#00000080;color:#fff;transition:background-color .2s ease}.project-quick-actions a:hover{background:#3b82f6}.project-copy{padding:1.5rem}.about-project-grid h3{margin:0 0 .5rem;font-size:1.25rem;font-weight:600}.about-project-grid article:hover h3{color:#3b82f6}.about-project-grid p{color:var(--muted);font-size:.875rem;line-height:1.55}.about-project-grid h4{margin:1rem 0 .5rem;color:var(--muted);font-size:.68rem;font-weight:500;letter-spacing:.05em;text-transform:uppercase}.technology-list{display:flex;flex-wrap:wrap;gap:.45rem}.about-project-grid .technology-list span{padding:.25rem .5rem;border-radius:999px;background:#3178c6;color:#fff;font-size:.75rem}.about-project-grid .technology-list .technology-0{background:#1565c0}.about-project-grid .technology-list .technology-1{background:#7e3f78}.about-project-grid .technology-list .technology-2{background:#111827}.about-project-grid .technology-list .technology-3{background:#1e5c9a}.about-project-grid .technology-list .technology-4{background:#245076}.feature-list{display:grid;gap:.35rem;margin:0;padding:0;list-style:none;color:var(--muted);font-size:.875rem}.feature-list li{display:flex;align-items:flex-start;gap:.45rem}.feature-list svg{flex:0 0 auto;margin-top:.15rem;color:#22c55e}.project-actions{display:flex;flex-wrap:wrap;gap:1rem;margin-top:1.25rem}.project-actions a{display:inline-flex;align-items:center;gap:.35rem;color:#1d4ed8;font-size:.875rem;font-weight:500}.interest-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:2rem}.interest{position:relative;min-height:24rem;padding:2rem;border-radius:.75rem;color:#fff;box-shadow:0 10px 15px -3px #0000001a;transition:transform .3s ease,box-shadow .3s ease}.interest:hover{transform:translateY(-.5rem) scale(1.02);box-shadow:0 25px 50px -12px #00000040}.interest-0{background:linear-gradient(135deg,#8b5cf6e6,#3b82f6e6)}.interest-1{background:linear-gradient(135deg,#22c55ee6,#84cc16e6)}.interest-2{background:linear-gradient(135deg,#ec4899e6,#ef4444e6)}.interest-icon{position:absolute;top:1rem;right:1rem;width:2rem;height:2rem;color:#fff3}.interest h3{margin:0;font-size:1.25rem;font-weight:500}.interest p{margin-top:1rem;color:#fffc;font-size:.875rem;line-height:1.55}.interest h4{margin:1.25rem 0 .75rem;color:#fff9;font-size:.75rem;font-weight:500;text-transform:uppercase}.interest ul{display:grid;gap:.5rem;margin:0;padding:0;list-style:none}.interest li{display:grid;gap:.2rem;padding:.55rem;border-radius:.5rem;background:#ffffff1a}.interest li span{color:#fff;font-size:.875rem;font-weight:500}.interest small{color:#fff9;font-size:.75rem}.contact-panel{display:grid;justify-items:center;gap:2rem;padding:2rem;text-align:center}.contact-panel>div:first-child{display:grid;justify-items:center;gap:1rem}.contact-panel>div:first-child p{color:var(--muted)}.contact-links{display:flex;flex-wrap:wrap;justify-content:center;gap:1.5rem}.contact-links a{display:flex;min-width:58px;flex-direction:column;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;transition:transform .2s ease}.contact-links a:hover{transform:scale(1.05)}.contact-social-icon{display:grid;width:60px;height:60px;place-items:center;border-radius:.75rem;background:#ffffff80;transition:background-color .3s ease}.dark .contact-social-icon{background:#09090bf2}.contact-links a:hover .contact-social-icon{background:#00000014}.dark .contact-links a:hover .contact-social-icon{background:#ffffff14}.contact-social-icon svg{width:2rem;height:2rem}.contact-linkedin{color:#0077b5}.contact-instagram{color:#e4405f}.contact-email{color:#3b82f6}.contact-location{display:flex;align-items:center;gap:.4rem;margin:0;color:var(--muted);font-size:.875rem}@media(max-width:767px){.about-header{padding:0 1rem}.about-rss-link span{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.header-controls{gap:0}.about-shell .about-content{padding:23rem 3rem 6rem}.about-page{gap:8rem}.about-intro,.about-github-section,.about-projects-section{width:100%;margin-left:0}.about-intro{min-height:0;flex-direction:column;padding:2rem}.about-portrait-wrap img{width:128px;height:128px}.about-intro h1{font-size:2.25rem}.about-gradient-title{font-size:1.875rem}.about-skills-section,.about-github-section{padding:1rem}.skill-categories{gap:1.5rem}.skill-categories h3{font-size:1.25rem}.skills-grid,.skill-categories>section:nth-child(2) .skills-grid{grid-template-columns:minmax(0,1fr);grid-template-rows:none;grid-auto-flow:row;gap:1rem}.skill{grid-template-columns:66px minmax(0,1fr) 34px;gap:.4rem;font-size:.75rem}.github-calendar-footer{align-items:flex-start;flex-direction:column}.about-section-heading{align-items:center}.about-section-heading>a{font-size:.68rem}.about-section-heading>a svg{width:13px;height:13px}.about-project-grid,.interest-grid{grid-template-columns:1fr}.project-media{height:200px}.interest-grid{gap:2rem}.interest{min-height:0}.contact-panel>div:first-child p{max-width:19rem;font-size:.82rem;line-height:1.5}.contact-links{display:grid;grid-template-columns:repeat(2,60px);gap:1.5rem}.contact-social-icon{width:52px;height:52px}.contact-social-icon svg{width:1.5rem;height:1.5rem}.contact-location{max-width:19rem;align-items:flex-start;text-align:left}.contact-location svg{flex:0 0 auto;margin-top:.1rem}}@media(prefers-reduced-motion:reduce){.about-page>section,.about-project-grid img,.interest,.contact-links a{animation:none;transition:none}}.graph-controls{display:grid;grid-template-columns:minmax(16rem,1fr) auto auto;align-items:end;gap:1rem;margin-bottom:1rem;padding:1rem;border:1px solid var(--border);border-radius:.85rem;background:var(--surface)}.graph-search{position:relative;display:grid;gap:.4rem}.graph-search>label,.graph-depth{color:var(--muted);font-size:.78rem;font-weight:650}.graph-search>div{display:flex}.graph-search input,.graph-depth select{min-height:2.55rem;border:1px solid var(--border);background:var(--surface-soft);color:var(--text)}.graph-search input{width:100%;padding:.55rem .75rem;border-radius:.5rem 0 0 .5rem}.graph-search>div button{padding:.55rem .85rem;border-radius:0 .5rem .5rem 0;background:var(--accent-strong);color:var(--surface);cursor:pointer;font-weight:650}.graph-search-results{position:absolute;z-index:4;top:100%;right:0;left:0;display:grid;gap:.2rem;margin:.25rem 0 0;padding:.35rem;border:1px solid var(--border);border-radius:.5rem;background:var(--surface);box-shadow:var(--shadow);list-style:none}.graph-search-results button{width:100%;padding:.55rem .6rem;border-radius:.35rem;background:transparent;cursor:pointer;text-align:left}.graph-search-results button:hover,.graph-search-results button:focus-visible{background:var(--surface-hover)}.graph-depth{display:grid;gap:.4rem}.graph-depth select{min-width:4.5rem;padding:.4rem .6rem;border-radius:.5rem}.graph-toggle{display:inline-flex;align-items:center;gap:.55rem;min-height:2.55rem;color:var(--muted);font-size:.9rem}.graph-focus-summary{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:.75rem;color:var(--muted);font-size:.85rem}.graph-focus-summary a,.graph-focus-summary button{padding:.35rem .6rem;border-radius:.4rem;background:var(--surface-hover);color:var(--accent);cursor:pointer}.graph-legend{display:flex;justify-content:flex-end;gap:1rem;margin-bottom:.5rem;color:var(--muted);font-size:.75rem}.graph-legend span{display:inline-flex;align-items:center;gap:.35rem}.graph-legend span:before{width:.65rem;height:.65rem;border-radius:50%;content:""}.graph-legend-current:before{background:var(--secondary)}.graph-legend-visited:before{background:var(--tertiary)}.graph-canvas{position:relative;box-sizing:border-box;width:100%;height:min(68vh,680px);min-height:420px;overflow:hidden;border:1px solid var(--border);border-radius:5px;background:var(--surface-soft)}.graph-canvas canvas{display:block;width:100%;height:100%;touch-action:none}.graph-view-local .graph-canvas{height:250px;min-height:250px}.graph-view-local .graph-legend{justify-content:flex-start}.graph-fallback{margin-top:1rem;padding:1rem;border:1px solid var(--border);border-radius:.7rem}.graph-fallback summary{cursor:pointer;font-weight:650}.graph-fallback ul{display:grid;gap:.55rem;margin:1rem 0 0;padding:0;list-style:none}.graph-fallback li{display:flex;justify-content:space-between;gap:1rem}.graph-fallback li[data-current] a{color:var(--secondary);font-weight:700}.graph-fallback li[data-visited]:not([data-current]) a{color:var(--tertiary)}.graph-fallback a{color:var(--accent)}.graph-fallback span{color:var(--muted);font-size:.8rem}.quartz-right-sidebar{position:sticky;top:0;display:flex;flex-direction:column;align-self:start;gap:1.2rem;width:320px;height:100vh;padding:6rem 2rem 2rem;overflow:hidden;box-sizing:border-box;background:var(--page);color:var(--darkgray);font-family:var(--bodyFont)}.quartz-right-sidebar h3{color:var(--dark);font-family:var(--headerFont);font-weight:600}.quartz-right-sidebar>.graph{flex:0 0 auto}.quartz-right-sidebar .graph>h3,.quartz-right-sidebar .backlinks>h3{margin:0;font-size:1rem}.quartz-right-sidebar .graph>.graph-outer{position:relative;height:250px;margin:.5em 0;overflow:hidden;border:1px solid var(--lightgray);border-radius:5px;box-sizing:border-box}.quartz-right-sidebar .graph-container{width:100%;height:100%}.quartz-right-sidebar .global-graph-icon{position:absolute;top:0;right:0;width:24px;height:24px;margin:.3rem;padding:.2rem;border:none;border-radius:4px;cursor:pointer;background:transparent;color:var(--dark);opacity:.5;transition:background-color .5s ease}.quartz-right-sidebar .global-graph-icon:hover{background-color:var(--lightgray)}.quartz-right-sidebar .global-graph-outer{position:fixed;z-index:9999;top:0;left:0;display:none;width:100vw;height:100%;overflow:hidden;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.quartz-right-sidebar .global-graph-outer.active{display:inline-block}.quartz-right-sidebar .global-graph-container{position:fixed;top:50%;left:50%;width:80vw;height:80vh;border:1px solid var(--lightgray);border-radius:5px;background-color:var(--light);transform:translate(-50%,-50%);box-sizing:border-box}.quartz-right-sidebar .toc{display:flex;flex:1 1 auto;flex-direction:column;min-height:1.4rem;overflow-y:hidden}.quartz-right-sidebar .toc:has(button.toc-header.collapsed){flex:0 1 1.4rem}.quartz-right-sidebar button.toc-header{display:flex;align-items:center;padding:0;border:none;cursor:pointer;background-color:transparent;color:var(--dark);text-align:left}.quartz-right-sidebar button.toc-header h3{display:inline-block;margin:0;font-size:1rem}.quartz-right-sidebar button.toc-header .fold{margin-left:.5rem;opacity:.8;transition:transform .3s ease}.quartz-right-sidebar button.toc-header.collapsed .fold{transform:rotate(-90deg)}.quartz-right-sidebar ul.toc-content.overflow{position:relative;display:flex;flex:1 1 auto;flex-direction:column;gap:.35rem;min-height:0;max-height:none;margin:.75rem 0;padding:0;list-style:none;overscroll-behavior:contain}.quartz-right-sidebar ul.toc-content.overflow>li>a{display:block;color:var(--dark);line-height:1.6rem;opacity:.67;transition:.5s ease opacity,.3s ease color,.2s ease font-weight}.quartz-right-sidebar ul.toc-content.overflow>li>a.in-view{opacity:1;font-weight:700}.quartz-right-sidebar ul.toc-content.overflow .depth-0{padding-left:0}.quartz-right-sidebar ul.toc-content.overflow .depth-1{padding-left:1rem}.quartz-right-sidebar ul.toc-content.overflow .depth-2{padding-left:2rem}.quartz-right-sidebar ul.toc-content.overflow .depth-3{padding-left:3rem}.quartz-right-sidebar ul.toc-content.overflow .depth-4{padding-left:4rem}.quartz-right-sidebar ul.toc-content.overflow .depth-5{padding-left:5rem}.quartz-right-sidebar ul.toc-content.overflow .depth-6{padding-left:6rem}.quartz-right-sidebar .backlinks{flex-direction:column}.quartz-right-sidebar .backlinks>ul.overflow{max-height:calc(100% - 2rem);margin:.5rem 0;padding:0;list-style:none;overscroll-behavior:contain}.quartz-right-sidebar .backlinks>ul.overflow>li>a{background-color:transparent}.quartz-right-sidebar div:has(>.overflow){max-height:100%;overflow-y:hidden}.quartz-right-sidebar ul.overflow,.quartz-right-sidebar ol.overflow{width:100%;max-height:100%;margin-bottom:0;overflow-y:auto;clear:both}.quartz-right-sidebar ul.overflow>li.overflow-end,.quartz-right-sidebar ol.overflow>li.overflow-end{height:.5rem;margin:0}.quartz-right-sidebar ul.overflow.gradient-active,.quartz-right-sidebar ol.overflow.gradient-active{-webkit-mask-image:linear-gradient(to bottom,black calc(100% - 50px),transparent 100%);mask-image:linear-gradient(to bottom,black calc(100% - 50px),transparent 100%)}.quartz-right-sidebar a{color:var(--secondary);font-weight:600;text-decoration:none;transition:color .2s ease}.quartz-right-sidebar a:hover{color:var(--tertiary)}.quartz-right-sidebar a.internal{padding:0 .1rem;border-radius:5px;background-color:color-mix(in srgb,var(--tertiary) 15%,transparent);line-height:1.4rem}@media all and (max-width:1199px){.quartz-right-sidebar{position:static;flex-direction:row;width:100%;height:auto;padding:0;overflow:visible;background:transparent}.quartz-right-sidebar>*{flex:1;max-height:24rem}.quartz-right-sidebar>.graph{flex:1}.quartz-right-sidebar>.toc{display:none}}@media all and (max-width:800px){.quartz-right-sidebar .global-graph-container{width:90%}}:root{color-scheme:light;--page: #f5f5fa;--surface: #ffffff;--surface-soft: #ffffff;--article: #e9e9ef;--surface-hover: rgb(0 0 0 / .075);--text: #27272a;--muted: #526075;--border: rgb(39 39 42 / .05);--accent: #1d4ed8;--accent-strong: #2563eb;--graph-current: #c2410c;--graph-visited: #6d28d9;--shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--navbar-bg: rgb(255 255 255 / .7);--secondary: #284b63;--tertiary: #84a59d;--gray: #b8b8b8;--lightgray: #e5e5e5;--darkgray: #4e4e4e;--dark: #2b2b2b;--light: #faf8f8;--bodyFont: "Source Sans 3", "Source Sans Pro", sans-serif;--headerFont: "Schibsted Grotesk", sans-serif;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}:root.dark{color-scheme:dark;--page: #303030;--surface: #424242;--surface-soft: rgb(255 255 255 / .055);--article: #303030;--surface-hover: rgb(255 255 255 / .09);--text: #e1e1e1;--muted: #e0e0e0;--border: rgb(255 255 255 / .05);--accent: #60a5fa;--accent-strong: #93c5fd;--graph-current: #fb923c;--graph-visited: #c4b5fd;--shadow: 0 14px 32px rgb(0 0 0 / .18);--navbar-bg: rgb(24 24 27 / .8);--secondary: #7b97aa;--tertiary: #84a59d;--gray: #646464;--lightgray: #393639;--darkgray: #d4d4d4;--dark: #ebebec;--light: #161618}*,:before,:after{box-sizing:border-box;border:0 solid}html{background:var(--page);scroll-behavior:smooth}html[lang=ko]{font-family:Malgun Gothic,Apple SD Gothic Neo,Noto Sans KR,ui-sans-serif,system-ui,sans-serif}body{margin:0;min-width:320px;background:var(--page);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:background-color .35s ease,color .15s ease}body,h1,h2,h3,h4,p,figure,blockquote,dl,dd{margin:0}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;letter-spacing:inherit}button{color:inherit}img,svg,video,canvas{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}h1,h2,h3,h4,strong{font-weight:700}::selection{background:#3b82f640}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;left:1rem;top:-5rem;z-index:100;padding:.75rem 1rem;border-radius:.5rem;background:var(--text);color:var(--page)}.skip-link:focus{top:1rem}.app-wrapper{min-height:100vh;background:var(--page)}.app-container{display:grid;grid-template-columns:256px minmax(0,1fr);gap:1rem;width:min(100%,90rem);min-height:100vh;margin:0 auto;padding:0 1rem}.sidebar{position:sticky;top:0;display:flex;height:100vh;overflow-y:auto;flex-direction:column;padding:4rem 1rem 1.5rem}.profile-image{width:128px;height:128px;border-radius:999px;object-fit:cover}.profile-title{display:block;margin:1rem 0 .35rem;font-size:1.25rem;font-weight:650}.profile-block p{min-height:2.5rem;margin:0 0 1rem;color:var(--text);font-size:.875rem;font-style:italic}.social-links{display:flex;gap:1rem;margin-bottom:1.5rem}.social-links a{color:var(--text);transition:color .15s ease,transform .2s ease}.social-links a:hover{color:var(--text);transform:translateY(-2px)}.social-links svg{width:22px;height:22px}.sidebar-nav{display:grid;gap:3px}.nav-link,.control-button{display:flex;align-items:center;gap:.5rem;min-height:38px;padding:.4rem 0;border:0;border-radius:.55rem;background:transparent;transition:color .15s ease,background .15s ease}.nav-link:hover,.control-button:hover{background:var(--surface-soft)}.nav-link.active{color:var(--accent);font-weight:650}.sidebar-controls{display:grid;gap:1rem;margin-top:1.5rem}.control-button{width:100%;cursor:pointer;text-align:left}.global-search-button{width:100%;margin-bottom:.25rem;cursor:pointer;text-align:left}.global-search-button kbd{margin-left:auto;color:var(--muted);font-size:.65rem}.mobile-header-actions{display:flex;align-items:center;gap:.25rem}.main-content{min-width:0;padding:2rem 1rem 2rem 0}.page{width:min(100%,70rem);margin:0 auto;padding-top:2rem}.page-wide{width:min(100%,75rem)}.page-header{margin-bottom:3rem}.page-header h1{margin:0 0 .5rem;font-size:1.875rem;line-height:1.2;letter-spacing:-.02em}.page-header p{max-width:48rem;margin:0;color:var(--muted);font-size:1.05rem}.page-header .eyebrow{color:var(--accent);font-size:.78rem}.eyebrow{margin:0 0 .5rem;color:var(--accent);font-size:.78rem;font-weight:750;letter-spacing:.12em;text-transform:uppercase}.mobile-header{display:none}.icon-button{display:inline-grid;width:40px;height:40px;place-items:center;border:0;border-radius:.6rem;background:transparent;cursor:pointer}.icon-button:hover{background:var(--surface-hover)}.global-search-dialog{width:min(42rem,calc(100vw - 2rem));max-width:none;padding:0;border:1px solid var(--border);border-radius:.85rem;background:var(--surface);color:var(--text);box-shadow:0 24px 80px #00000047}.global-search-dialog::backdrop{background:#0f172a7a;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.global-search-panel{padding:1rem}.global-search-panel>header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:.75rem}.global-search-panel h2{margin:0;font-size:1rem}.global-search-panel header button{display:grid;width:34px;height:34px;place-items:center;border:0;border-radius:.5rem;background:transparent;cursor:pointer}.global-search-panel header button:hover{background:var(--surface-hover)}.global-search-panel .search-field kbd{color:var(--muted);font-size:.7rem}.global-search-results{max-height:min(55vh,30rem);overflow-y:auto}.global-search-results>p{margin:1rem 0 0;padding:1.5rem;color:var(--muted);text-align:center}.global-search-results ul{display:grid;gap:.35rem;margin:.75rem 0 0;padding:0;list-style:none}.global-search-results a{display:grid;gap:.2rem;padding:.8rem;border-radius:.6rem}.global-search-results a:hover,.global-search-results a.is-active,.global-search-results a:focus-visible{outline:none;background:var(--surface-hover)}.global-search-results strong{font-size:.92rem}.global-search-results span{overflow:hidden;color:var(--muted);font-size:.8rem;text-overflow:ellipsis;white-space:nowrap}.global-search-results small{color:var(--accent);font-size:.68rem}.global-search-results mark{border-radius:.15rem;background:color-mix(in srgb,var(--accent) 22%,transparent);color:inherit}.quartz-popover{position:fixed;z-index:80;width:min(24rem,calc(100vw - 2rem));max-height:20rem;overflow:hidden;padding:1rem;border:1px solid var(--border);border-radius:.7rem;background:var(--surface);box-shadow:0 18px 48px #0003;pointer-events:none}.quartz-popover>strong{display:block;margin-bottom:.55rem;font-size:.9rem}.quartz-popover>div{max-height:16rem;overflow:hidden;color:var(--muted);font-size:.78rem;line-height:1.5;-webkit-mask-image:linear-gradient(to bottom,black 75%,transparent);mask-image:linear-gradient(to bottom,black 75%,transparent)}.quartz-popover h2,.quartz-popover h3{margin:.75rem 0 .35rem;color:var(--text);font-size:.88rem}.quartz-popover img{display:none}.language-choice,.error-page{display:grid;min-height:100vh;place-content:center;gap:1rem;padding:2rem;text-align:center}.language-choice a,.error-page a{color:var(--accent);text-decoration:underline}@media(max-width:768px){.app-wrapper{padding-top:4rem}.app-container{display:block;padding:0}.sidebar{display:none}.mobile-header{position:fixed;top:0;right:0;left:0;z-index:60;display:flex;height:64px;align-items:center;justify-content:space-between;padding:0 1rem;border-bottom:1px solid var(--border);color:var(--text);background:var(--navbar-bg);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.mobile-brand{display:flex;align-items:center;gap:.75rem;font-weight:650}.mobile-brand img{width:40px;height:40px;border-radius:999px;object-fit:cover}.mobile-menu{position:relative}.mobile-menu summary{display:grid;width:40px;height:40px;place-items:center;border-radius:.6rem;cursor:pointer;list-style:none}.mobile-menu summary::-webkit-details-marker{display:none}.mobile-menu[open] summary{background:var(--surface-hover)}.mobile-menu nav{position:fixed;top:64px;right:0;left:0;display:grid;gap:.25rem;padding:1rem;border-bottom:1px solid var(--border);background:var(--page);box-shadow:var(--shadow)}.mobile-controls{position:fixed;top:12px;right:56px;z-index:61;display:flex;gap:.25rem}.mobile-header-actions:has(.mobile-menu[open])>.icon-button{visibility:hidden}@media(max-width:360px){.mobile-header:has(.mobile-menu[open]) .mobile-brand span{display:none}}.main-content{padding:5rem 2rem 2rem}.page{padding-top:2rem}}.hero-section{padding:0}.hero-section h1{display:flex;align-items:center;gap:.55rem;margin:0 0 1rem;font-size:2.25rem;line-height:2.5rem;letter-spacing:-.025em}.hero-section p{max-width:48rem;margin:0;color:var(--text);font-size:1.125rem;line-height:1.75rem;white-space:pre-line}.wave{display:inline-block;padding:0;border:0;background:transparent;cursor:pointer;transform-origin:70% 70%}.wave.is-waving{animation:wave .65s ease-in-out 1}.wave:hover{animation:wave .65s ease-in-out infinite}@keyframes wave{0%,to{transform:rotate(0)}30%{transform:rotate(-18deg)}60%{transform:rotate(12deg)}}.section-block{margin-top:3rem}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:0;margin-bottom:1.5rem}.section-heading h2{margin:0;font-size:1.5rem;letter-spacing:-.02em}.section-heading a{display:inline-flex;align-items:center;gap:.25rem;color:var(--muted);font-size:.9rem}.section-heading a:hover{color:var(--accent)}.project-summary-grid,.card-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem}.card-grid{align-items:start}.project-summary,.content-card{overflow:hidden;border:0;border-radius:.5rem;background:var(--surface-soft);box-shadow:0 1px 2px #0000000d;transition:box-shadow .2s ease}.project-summary:hover,.content-card:hover{box-shadow:var(--shadow)}.project-summary{padding:1.5rem}.project-summary h3{margin:0 0 .375rem;font-size:1.25rem}.project-summary p{min-height:3rem;margin:0 0 1rem;color:var(--text);font-size:.875rem;line-height:1.5}.technology-list{display:flex;flex-wrap:wrap;gap:.4rem}.technology-list span{padding:.28rem .55rem;border-radius:999px;background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent-strong);font-size:.74rem;font-weight:650}.technology-list .project-technology{color:#fff}.content-card{display:block}.card-cover{width:100%;aspect-ratio:2 / 1;object-fit:cover}.card-body{padding:1.5rem}.card-body h2{margin:.5rem 0;font-size:1.25rem;line-height:1.25}.content-card:not(.content-card-compact):not(.content-card-archive) .card-body h2{margin-bottom:1.75rem}.card-body>p{display:-webkit-box;overflow:hidden;margin:0 0 1rem;color:var(--text);font-size:.875rem;line-height:1.5;-webkit-box-orient:vertical;-webkit-line-clamp:2}.card-tags{display:flex;flex-wrap:wrap;gap:.4rem}.tag-badge{display:inline-flex;padding:.28rem .6rem;border-radius:999px;font-size:.73rem;font-weight:650;line-height:1}.tag-badge-filter{padding:.25rem .75rem;font-size:.875rem;line-height:1.25rem}.card-meta{display:flex;flex-wrap:wrap;gap:1rem;color:var(--text);font-size:.875rem}.card-meta span,.article-meta span{display:inline-flex;align-items:center;gap:.35rem}.stats-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.5rem}.stats-grid>div{display:grid;gap:.375rem;padding:1.5rem;border:0;border-radius:.5rem;background:var(--surface-soft);box-shadow:0 1px 2px #0000000d}.stats-grid strong{color:var(--text);font-size:1.875rem}.stats-grid span{color:var(--text);font-size:1.125rem;font-weight:600}.filter-panel{margin-bottom:3rem}.search-field{position:relative;display:flex;align-items:center;flex-wrap:wrap;gap:.7rem;min-height:40px;padding:.375rem .75rem;border:1px solid #e5e7eb;border-radius:.375rem;background:transparent}.search-field:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 15%,transparent)}.search-field input{flex:1 1 12rem;min-width:8rem;border:0;outline:0;background:transparent;color:var(--text)}.search-field button{display:grid;place-items:center;padding:.25rem;border:0;background:transparent;cursor:pointer}.tag-suggestions{position:absolute;z-index:20;top:calc(100% + .35rem);right:0;left:0;display:grid;overflow:hidden;padding:.35rem;border:1px solid var(--border);border-radius:.65rem;background:var(--surface);box-shadow:var(--shadow)}.tag-suggestions button{display:flex;width:100%;padding:.45rem;border-radius:.45rem;text-align:left}.tag-suggestions button:hover,.tag-suggestions button[aria-selected=true]{background:var(--surface-hover)}.tag-filters{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:3rem}.tag-filters button{padding:0;border:0;background:transparent;cursor:pointer}.empty-state{display:grid;min-height:12rem;place-content:center;justify-items:center;gap:.75rem;border:2px dashed var(--border);border-radius:.8rem;color:var(--muted);text-align:center}.category-list{display:grid;gap:1rem}.archive-page{width:min(100%,56rem)}.category-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:1rem;min-height:6rem;padding:1.5rem;border:0;border-radius:.5rem;background:color-mix(in srgb,var(--text) 5%,var(--page));transition:background .2s ease,border-color .2s ease,transform .2s ease}.category-card:hover{transform:translate(3px);background:var(--surface-hover)}.category-icon{font-size:1.65rem}.category-card h2{margin:0;font-size:1.15rem}.category-card p{margin:0;color:var(--muted);font-size:.86rem}.category-count{padding:.25rem .75rem;border-radius:999px;background:color-mix(in srgb,var(--text) 7%,transparent);color:var(--text);font-size:.875rem}.category-arrow{color:var(--muted)}.back-link{display:inline-flex;margin-bottom:1.25rem;color:var(--muted);font-size:.9rem}.back-link:hover{color:var(--accent)}.archive-entry-list{display:grid;gap:1.25rem}.archive-entry-list .content-card{display:grid;grid-template-columns:minmax(0,1fr) auto}.archive-category-header{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;column-gap:1rem;row-gap:3rem;margin-bottom:3rem}.archive-category-header .back-link,.article-layout>.back-link{margin-bottom:0}.archive-category-header h1{margin:0}.archive-category-header p{grid-column:1 / -1}.content-card-archive{background:color-mix(in srgb,var(--text) 5%,var(--page))}.content-card-archive .card-body h2{margin:0 0 .5rem}.content-card-archive .card-body>p{margin-bottom:.75rem;font-size:1rem;line-height:1.5}.content-card-archive .card-meta{gap:0}.article-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;align-items:start;justify-content:center;gap:5px;width:min(100%,70rem);margin:0 auto;padding-top:0}.article-main{min-width:0}.article-main>.back-link{margin-bottom:1.25rem}.article-card{overflow:hidden;border-radius:.5rem;background:var(--article)}.article-header{padding:2rem}.article-header h1{max-width:none;margin:0 0 .5rem;font-size:2.25rem;line-height:2.5rem;letter-spacing:normal}.article-byline{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}.article-byline>.card-tags{flex:0 0 auto;flex-wrap:nowrap}.article-meta{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:0;color:var(--text);font-size:1rem}.markdown-content{padding:2rem;font-size:1.125rem;line-height:1.625;overflow-wrap:anywhere}.markdown-content>:first-child{margin-top:0}.markdown-content h2,.markdown-content h3,.markdown-content h4{scroll-margin-top:5rem;color:var(--text);line-height:1.25;letter-spacing:-.02em}.markdown-content h2{margin:2.5rem 0 1.5rem;font-size:1.875rem}.markdown-content h3{margin:2rem 0 1rem;font-size:1.5rem}.markdown-content p{margin:0 0 1.5rem}.markdown-content a{color:var(--accent);text-decoration:underline;text-underline-offset:.18em}.markdown-content ul,.markdown-content ol{margin:0 0 1.4rem;padding-left:1.6rem}.markdown-content li{margin:.35rem 0}.markdown-content pre{overflow:auto;margin:1.5rem 0;padding:1rem;border-radius:.6rem;background:#111827;color:#f8fafc}.markdown-content :not(pre)>code{padding:.15rem .35rem;border-radius:.3rem;background:var(--surface-hover);font-size:.9em}.markdown-content table{display:block;width:100%;overflow-x:auto;border-collapse:collapse}.markdown-content th,.markdown-content td{min-width:9rem;padding:.7rem .8rem;border:1px solid var(--border);overflow-wrap:normal;text-align:left;word-break:normal}.markdown-content th:first-child,.markdown-content td:first-child{min-width:5.5rem}.markdown-content th{background:var(--surface-hover)}.markdown-content img{display:block;max-height:36rem;margin:1.5rem auto;border-radius:.6rem;object-fit:contain}.markdown-content blockquote{margin:1.5rem 0;padding:.2rem 1rem;border-left:3px solid var(--accent);color:var(--muted)}.markdown-content hr{margin:4rem 0;border:0;border-top:2px solid #e5e7eb}.dark .markdown-content hr{border-top-color:#374151}.link-list a{color:var(--muted);font-size:.82rem;line-height:1.4}.link-list a:hover{color:var(--accent)}.link-list{display:grid;gap:.45rem;margin:0;padding:0;list-style:none}.article-related{margin-top:1.25rem;padding:1rem;border:1px solid var(--border);border-radius:.65rem;background:var(--surface)}.article-related h2{margin:0 0 .75rem;font-size:1rem}@media(min-width:1200px){.article-layout{margin-top:-2rem;margin-bottom:-2rem}.article-main{padding-top:2rem;padding-bottom:2rem}}@media(max-width:1199px){.article-layout{grid-template-columns:minmax(0,1fr);row-gap:1.25rem}}@media(max-width:768px){.project-summary-grid,.card-grid,.skills-grid,.stats-grid{grid-template-columns:1fr}.stats-grid>div{padding:1.5rem}.stats-grid strong{font-size:1.875rem}.category-card{grid-template-columns:auto minmax(0,1fr) auto auto}.category-card p{display:none}.category-count{font-size:.75rem}.article-layout{padding-top:0}.article-card-blog .article-byline{margin-bottom:3.5rem}.article-card-archive .article-header{padding-top:2.5rem}html[lang=ko] .article-card-archive .article-header h1{font-size:2rem;line-height:1.25}html[lang=ko] .section-heading h2{letter-spacing:-.04em}.graph-canvas{min-height:360px}.graph-view-local .graph-canvas{min-height:12rem}.graph-controls{grid-template-columns:1fr;align-items:stretch}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation:none!important;transition:none!important}}
