:root{--font-heading:"Pretendard",system-ui,sans-serif;--font-heading-weight:600;--font-body:"Pretendard",system-ui,sans-serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color-scheme:light;--color-bg:#f3f2f2;--color-surface:#eae9e9;--series-banner-bg:#202023;--color-text:#201e1d;--color-divider:color-mix(in srgb,#201e1d 16%,transparent);--color-neutral-100:#f8f4f4;--color-neutral-200:#eae7e7;--color-neutral-300:#d7d3d3;--color-neutral-400:#bab6b6;--color-neutral-500:#9b9797;--color-neutral-600:#7d7979;--color-neutral-700:#605d5d;--color-neutral-800:#444141;--color-neutral-900:#2d2b2b;--color-accent:#4caf50;--color-accent-100:#e8f5e9;--color-accent-200:#c8e6c9;--color-accent-300:#a5d6a7;--color-accent-400:#81c784;--color-accent-500:#66bb6a;--color-accent-600:#43a047;--color-accent-700:#388e3c;--color-accent-800:#2e7d32;--color-accent-900:#1b5e20;--color-accent-2:#d6006c;--color-accent-2-100:#fff1f4;--color-accent-2-200:#ffdee6;--color-accent-2-300:#ffc0d0;--color-accent-2-400:#ff90b1;--color-accent-2-500:#ff458e;--color-accent-2-600:#d82071;--color-accent-2-700:#aa0b56;--color-accent-2-800:#790e3d;--color-accent-2-900:#4b1528;--space-1:5px;--space-2:10px;--space-3:15px;--space-4:20px;--space-6:30px;--space-8:40px;--radius-card:20px;--radius-pill:999px;--radius-sm:1px;--radius-md:2px;--radius-lg:4px;--droplet-amp:1;--bar-ease-size:cubic-bezier(0.16,1,0.3,1);--bar-ease-spring:cubic-bezier(0.34,1.32,0.44,1);--bar-ease-dur:0.72s;--glass-bg:color-mix(in srgb,var(--color-bg) 68%,transparent);--glass-sheen:color-mix(in srgb,white 42%,transparent);--glass-edge:color-mix(in srgb,white 60%,transparent);--glass-rim:color-mix(in srgb,#201e1d 10%,transparent);--glass-bg-clear:color-mix(in srgb,var(--color-bg) 34%,transparent);--glass-bg-fallback:color-mix(in srgb,var(--color-bg) 52%,transparent);--glass-bg-panel:color-mix(in srgb,var(--color-bg) 62%,transparent);--glass-inner-shade:rgba(0,0,0,0.1);--glass-blur:0.5px;--shadow-sm:0 1px 2px color-mix(in srgb,#2d2b2b 14%,transparent);--shadow-md:0 3px 10px color-mix(in srgb,#2d2b2b 16%,transparent);--shadow-lg:0 12px 32px color-mix(in srgb,#2d2b2b 22%,transparent)}html[data-theme=dark]{color-scheme:dark;--color-bg:#1b1a1d;--color-surface:#242327;--series-banner-bg:#34343a;--color-text:#eeecec;--color-divider:color-mix(in srgb,#eeecec 18%,transparent);--color-accent:#5aa860;--color-accent-100:#17351f;--color-accent-200:#1f452a;--color-accent-300:#2a5a36;--color-accent-400:#3c7a49;--color-accent-500:#4a8a52;--color-accent-600:#5aa860;--color-accent-700:#7fc986;--color-accent-800:#a8dfae;--color-accent-900:#d8f0da;--color-accent-2:#ff6fae;--color-accent-2-100:#3a0f22;--color-accent-2-200:#521530;--color-accent-2-300:#71203f;--color-accent-2-400:#9c2c56;--color-accent-2-500:#cf3e72;--color-accent-2-600:#ff6fae;--color-accent-2-700:#ff9cc7;--color-accent-2-800:#ffc7de;--color-accent-2-900:#ffe6ef;--color-neutral-100:#2a2a2c;--color-neutral-200:#333335;--color-neutral-300:#414143;--color-neutral-400:#555557;--color-neutral-500:#6f6f71;--color-neutral-600:#8f8f91;--color-neutral-700:#b3b3b5;--color-neutral-800:#d6d6d8;--color-neutral-900:#f0f0f1;--glass-bg:color-mix(in srgb,var(--color-bg) 66%,transparent);--glass-sheen:color-mix(in srgb,white 10%,transparent);--glass-edge:color-mix(in srgb,white 18%,transparent);--glass-rim:color-mix(in srgb,white 10%,transparent);--glass-bg-clear:color-mix(in srgb,var(--color-bg) 38%,transparent);--glass-bg-fallback:color-mix(in srgb,var(--color-bg) 56%,transparent);--glass-bg-panel:color-mix(in srgb,var(--color-bg) 66%,transparent);--glass-inner-shade:rgba(0,0,0,0.3);--shadow-sm:0 1px 2px rgba(0,0,0,0.5);--shadow-md:0 3px 10px rgba(0,0,0,0.55);--shadow-lg:0 12px 32px rgba(0,0,0,0.6)}*,:after,:before{box-sizing:border-box}body,html{padding:0}body{margin:0;background:var(--color-bg);color:var(--color-text);font-family:var(--font-body);font-feature-settings:none;font-variant-ligatures:none;font-size:15px;line-height:1.55;font-weight:400;transition:background .15s ease,color .15s ease;min-height:100vh;display:flex;flex-direction:column}.site-content{flex:1 0 auto}h1,h2,h3,h4,h5,h6{font-family:var(--font-heading);font-weight:var(--font-heading-weight);line-height:1.12;letter-spacing:-.015em;margin:0 0 var(--space-2)}h1{font-size:42px}h2{font-size:32px}h3{font-size:25px}h4{font-size:20px}h5{font-size:16px}h6{font-size:13px;letter-spacing:.08em;text-transform:uppercase}p{margin:0 0 var(--space-3)}a{color:var(--color-accent);text-underline-offset:3px}img{display:block;max-width:100%}figure{margin:0}figcaption{font-size:11px;margin-top:var(--space-1)}.text-muted,figcaption{color:color-mix(in srgb,var(--color-text) 55%,transparent)}:focus{outline:none}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}::selection{background:color-mix(in srgb,var(--color-accent) 30%,transparent)}.hr{height:1px;border:0;margin:var(--space-4) 0;background:var(--color-divider)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;cursor:pointer;text-decoration:none;font-family:var(--font-heading);font-weight:var(--font-heading-weight);font-size:14px;line-height:1.2;color:var(--color-text);background:transparent;border:1px solid transparent;padding:var(--space-2) calc(var(--space-3) * 1.2);border-radius:var(--radius-md)}.btn svg{display:block}.btn:disabled{opacity:.45;cursor:not-allowed}.spinner{display:inline-block;width:1em;height:1em;border:2px solid;border-right:2px solid transparent;border-radius:50%;animation:spin .6s linear infinite;vertical-align:-.15em;flex:none}@keyframes spin{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.spinner{animation-duration:1.8s}}.btn-primary{background:var(--color-accent);color:var(--color-bg)}.btn-primary:hover{background:var(--color-accent-600)}.btn-primary:active{background:var(--color-accent-700)}.btn-secondary{border-color:var(--color-divider)}.btn-secondary:hover{background:color-mix(in srgb,var(--color-text) 7%,transparent)}.btn-secondary:active{background:color-mix(in srgb,var(--color-text) 14%,transparent)}.btn-ghost{color:var(--color-accent);padding-inline:var(--space-1)}.btn-ghost:hover{background:color-mix(in srgb,var(--color-accent) 10%,transparent)}.btn-ghost:active{background:color-mix(in srgb,var(--color-accent) 18%,transparent)}.btn-icon{width:36px;height:36px;padding:0}.btn-block{width:100%;margin-top:var(--space-2)}.input{width:100%;min-height:36px;padding:6px 10px;font:inherit;font-size:14px;color:var(--color-text);caret-color:var(--color-accent);background:var(--color-surface);border:1px solid var(--color-divider);border-radius:var(--radius-md)}.input::placeholder{color:color-mix(in srgb,var(--color-text) 65%,transparent);opacity:1}.input:hover{border-color:color-mix(in srgb,var(--color-text) 45%,transparent)}.input:focus-visible{border-color:var(--color-accent);outline-offset:0}textarea.input{min-height:90px;resize:vertical}.card{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border-radius:var(--radius-md);background:var(--color-surface)}.card-kicker{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--color-accent)}.card-title{font-family:var(--font-heading);font-weight:var(--font-heading-weight);font-size:17px;line-height:1.2}.card-body{margin:0;font-size:13px;opacity:.8;flex:1 1}.card-meta{display:flex;align-items:center;gap:6px;font-size:11px;color:color-mix(in srgb,var(--color-text) 50%,transparent)}.card-meta-fade{animation:metaFadeIn .25s ease both}@keyframes metaFadeIn{0%{opacity:0}to{opacity:1}}.series-card{gap:var(--space-2);text-decoration:none;color:inherit}.series-banner,.series-card{display:flex;flex-direction:column}.series-banner{align-items:center;justify-content:center;gap:var(--space-3);aspect-ratio:16/9;padding:var(--space-4);border-radius:8px;overflow:hidden;background:var(--series-banner-bg);box-shadow:inset 0 0 0 1px var(--color-divider);transition:transform .18s ease,box-shadow .18s ease}.series-banner-title{font-family:var(--font-heading);font-weight:var(--font-heading-weight);font-size:clamp(17px,2.4vw,22px);line-height:1.35;margin:0;text-align:center;text-wrap:balance;color:#f3f2f2;transition:color .18s ease}.series-banner-rule{width:28px;height:2px;border-radius:2px;background:var(--color-accent)}.series-card:hover .series-banner{transform:translateY(-2px);box-shadow:inset 0 0 0 1px var(--color-accent),var(--shadow-md)}@media (prefers-reduced-motion:reduce){.series-banner{transition:none}.series-card:hover .series-banner{transform:none}}.tnum{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.elev-sm{box-shadow:var(--shadow-sm)}.elev-md{box-shadow:var(--shadow-md)}.elev-lg{box-shadow:var(--shadow-lg)}.tag{display:inline-flex;align-items:center;font-size:11px;letter-spacing:.02em;padding:3px 10px;border-radius:calc(var(--radius-md) * .75)}.tag-accent{background:var(--color-accent-100);color:var(--color-accent-800)}.tag-neutral{background:var(--color-neutral-100);color:var(--color-neutral-800)}.tag-outline{border:1px solid var(--color-accent)}.tag-outline,.tag-skill{color:var(--color-accent)}.tag-skill{padding:5px 12px;border-radius:var(--radius-pill);border:1px solid color-mix(in srgb,var(--color-accent) 38%,transparent);background:color-mix(in srgb,var(--color-accent) 10%,transparent);transition:border-color .18s ease,background .18s ease}.tag-skill:hover{border-color:color-mix(in srgb,var(--color-accent) 70%,transparent);background:color-mix(in srgb,var(--color-accent) 16%,transparent)}.chip-btn{border-radius:10px;transition:transform .15s ease}.chip-btn:active{transform:scale(.9)}.page-num-btn{transition:transform .15s ease}.page-num-btn:active{transform:scale(.85)}.dialog-backdrop{position:fixed;inset:0;display:grid;place-items:center;padding:var(--space-4);background:rgba(0,0,0,.45);z-index:200;animation:backdropIn .2s ease both}.dialog{position:relative;width:min(440px,100%);display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-4);border-radius:24px;background:linear-gradient(to bottom,var(--glass-sheen) 0,transparent 62%),var(--glass-bg-panel);backdrop-filter:blur(24px) saturate(180%);-webkit-backdrop-filter:blur(24px) saturate(180%);box-shadow:inset 0 0 0 1px var(--glass-rim),inset 0 1px 0 var(--glass-edge),inset 0 -10px 25px var(--glass-inner-shade),var(--shadow-lg);animation:modalPop .34s cubic-bezier(.34,1.4,.44,1) both}.dialog:before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;background:conic-gradient(from 200deg,transparent 0deg,var(--glass-edge) 55deg,transparent 130deg,transparent 200deg,var(--glass-edge) 290deg,transparent 350deg);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}.search-backdrop{animation:none;align-items:flex-start;justify-content:flex-end;display:flex;padding:88px var(--space-6) var(--space-4);background:transparent}.search-backdrop .dialog{background:linear-gradient(to bottom,var(--glass-sheen) 0,transparent 62%),var(--glass-bg);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);transform-origin:top right;width:min(var(--bar-w,462px),100%);max-height:70vh;overflow:hidden}.search-backdrop .dialog.has-lens{background:linear-gradient(to bottom,var(--glass-sheen) 0,transparent 62%),var(--glass-bg-clear);backdrop-filter:url(#liquid-glass-lens-search) blur(var(--glass-blur)) contrast(1.15) brightness(1.05) saturate(1.2);-webkit-backdrop-filter:url(#liquid-glass-lens-search) blur(var(--glass-blur)) contrast(1.15) brightness(1.05) saturate(1.2)}.search-backdrop .input{min-height:44px;padding:10px 16px;border-radius:16px;background:color-mix(in srgb,var(--color-text) 7%,transparent);border-color:var(--glass-rim)}.search-backdrop .input:focus-visible{border-color:var(--color-accent)}@media (max-width:640px){.search-backdrop .dialog{width:100%}.search-backdrop{padding:84px 12px var(--space-4)}}.dialog-title{font-family:var(--font-heading);font-weight:var(--font-heading-weight);font-size:20px}html.theme-transition::view-transition-old(root){animation:none}html.theme-transition::view-transition-new(root){animation:theme-reveal .6s cubic-bezier(.4,0,.2,1)}@keyframes theme-reveal{0%{-webkit-clip-path:circle(0 at var(--theme-x,50%) var(--theme-y,50%));clip-path:circle(0 at var(--theme-x,50%) var(--theme-y,50%))}to{-webkit-clip-path:circle(var(--theme-r,150vmax) at var(--theme-x,50%) var(--theme-y,50%));clip-path:circle(var(--theme-r,150vmax) at var(--theme-x,50%) var(--theme-y,50%))}}@keyframes modalPop{0%{opacity:0;transform:scale(.86,.9) translateY(-10px)}55%{opacity:1;transform:scale(1.03,.98) translateY(2px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes modalPopOut{0%{opacity:1;transform:scale(1) translateY(0)}30%{opacity:1;transform:scale(1.04,.94) translateY(3px)}to{opacity:0;transform:scale(.8,.86) translateY(-12px)}}@keyframes backdropOut{0%{opacity:1}to{opacity:0}}.dialog-backdrop.is-closing{animation:backdropOut .22s ease both;pointer-events:none}.search-backdrop.is-closing{animation:none}.dialog-backdrop.is-closing .dialog{animation:modalPopOut .26s cubic-bezier(.55,0,.85,.25) both}@keyframes backdropIn{0%{opacity:0}to{opacity:1}}@keyframes pageFadeIn{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}.skel{background:linear-gradient(90deg,var(--color-divider),color-mix(in srgb,var(--color-divider) 40%,transparent),var(--color-divider));background-size:200% 100%;animation:skelShine 1.4s ease-in-out infinite;border-radius:4px}@keyframes skelShine{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes cardIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.stagger-list>*{animation:cardIn .45s ease both;animation-delay:.56s}.stagger-list>:first-child{animation-delay:.02s}.stagger-list>:nth-child(2){animation-delay:.08s}.stagger-list>:nth-child(3){animation-delay:.14s}.stagger-list>:nth-child(4){animation-delay:.2s}.stagger-list>:nth-child(5){animation-delay:.26s}.stagger-list>:nth-child(6){animation-delay:.32s}.stagger-list>:nth-child(7){animation-delay:.38s}.stagger-list>:nth-child(8){animation-delay:.44s}.stagger-list>:nth-child(9){animation-delay:.5s}html.projects-nav-no-stagger .stagger-list>*{animation-duration:1ms!important;animation-delay:0s!important}.scroll-reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease,transform .6s ease}.scroll-reveal.is-visible{opacity:1;transform:translateY(0)}@media (prefers-reduced-motion:reduce){.scroll-reveal{opacity:1;transform:none;transition:none}}.pd-body.reveal-blocks>*{opacity:0;transform:translateY(12px);transition:opacity .5s ease,transform .5s ease}.pd-body.reveal-blocks>.is-visible{opacity:1;transform:none}.pd-body.reveal-blocks>ol.is-visible,.pd-body.reveal-blocks>p.is-visible,.pd-body.reveal-blocks>ul.is-visible{opacity:var(--pd-text-opacity)}@media (prefers-reduced-motion:reduce){.pd-body.reveal-blocks>*{opacity:1;transform:none;transition:none}.pd-body.reveal-blocks>ol,.pd-body.reveal-blocks>p,.pd-body.reveal-blocks>ul{opacity:var(--pd-text-opacity)}}@keyframes copyPopIn{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}.scroll-top-btn{position:fixed;right:var(--space-6);bottom:calc(var(--space-6) + 60px);width:44px;height:44px;border-radius:50%;border:none;background:linear-gradient(to bottom,var(--glass-sheen) 0,transparent 62%),var(--glass-bg-panel);backdrop-filter:blur(14px) saturate(180%);-webkit-backdrop-filter:blur(14px) saturate(180%);color:var(--color-accent);display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:inset 0 0 0 1px var(--glass-rim),inset 0 1px 0 var(--glass-edge),inset 0 -8px 18px var(--glass-inner-shade),var(--shadow-md);z-index:60;animation:scrollTopIn .35s cubic-bezier(.34,1.56,.64,1) both;transition:transform .2s ease,box-shadow .2s ease}.scroll-top-btn.has-lens{backdrop-filter:url(#liquid-glass-lens-fab) blur(var(--glass-blur)) contrast(1.15) brightness(1.05) saturate(1.2);-webkit-backdrop-filter:url(#liquid-glass-lens-fab) blur(var(--glass-blur)) contrast(1.15) brightness(1.05) saturate(1.2)}.scroll-top-btn:before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;background:conic-gradient(from 200deg,transparent 0deg,var(--glass-edge) 55deg,transparent 130deg,transparent 200deg,var(--glass-edge) 290deg,transparent 350deg);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}.scroll-top-btn.is-leaving{animation:scrollTopOut .2s ease both}.scroll-top-btn:hover{transform:scale(1.1);box-shadow:inset 0 0 0 1px var(--glass-rim),inset 0 1px 0 var(--glass-edge),inset 0 -10px 25px var(--glass-inner-shade),var(--shadow-lg)}.scroll-top-btn:active{transform:scale(.95)}.scroll-top-btn svg{transition:transform .3s cubic-bezier(.34,1.56,.64,1)}.scroll-top-btn.is-bouncing svg{animation:scrollTopArrowBounce .4s cubic-bezier(.34,1.56,.64,1)}@keyframes scrollTopIn{0%{transform:scale(.3) translateY(20px);opacity:0}60%{transform:scale(1.15) translateY(-4px)}to{transform:scale(1) translateY(0);opacity:1}}@keyframes scrollTopOut{0%{transform:scale(1);opacity:1}to{transform:scale(.5);opacity:0}}@keyframes scrollTopArrowBounce{0%{transform:translateY(0)}40%{transform:translateY(-5px)}to{transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.scroll-top-btn,.scroll-top-btn.is-bouncing svg{animation:none}}.site-header{position:fixed;top:0;left:0;right:0;z-index:40;pointer-events:none}.site-bar{pointer-events:auto;position:relative;display:flex;align-items:center;flex-wrap:nowrap;gap:var(--space-4);padding:var(--space-3) var(--space-6);background:var(--color-bg);border-bottom:1px solid var(--color-divider);width:100%;max-width:100%;margin-left:auto;margin-right:0;border-radius:0;transition:width var(--bar-ease-dur) var(--bar-ease-size),margin-right var(--bar-ease-dur) var(--bar-ease-size),padding var(--bar-ease-dur) var(--bar-ease-size),border-radius var(--bar-ease-dur) var(--bar-ease-spring),transform var(--bar-ease-dur) var(--bar-ease-spring),background .4s ease,box-shadow .4s ease,border-color .4s ease,-webkit-backdrop-filter .4s ease;transition:width var(--bar-ease-dur) var(--bar-ease-size),margin-right var(--bar-ease-dur) var(--bar-ease-size),padding var(--bar-ease-dur) var(--bar-ease-size),border-radius var(--bar-ease-dur) var(--bar-ease-spring),transform var(--bar-ease-dur) var(--bar-ease-spring),background .4s ease,box-shadow .4s ease,border-color .4s ease,backdrop-filter .4s ease;transition:width var(--bar-ease-dur) var(--bar-ease-size),margin-right var(--bar-ease-dur) var(--bar-ease-size),padding var(--bar-ease-dur) var(--bar-ease-size),border-radius var(--bar-ease-dur) var(--bar-ease-spring),transform var(--bar-ease-dur) var(--bar-ease-spring),background .4s ease,box-shadow .4s ease,border-color .4s ease,backdrop-filter .4s ease,-webkit-backdrop-filter .4s ease}.site-header.is-condensed .site-bar{width:var(--bar-w,max-content);margin-right:var(--space-6);padding-inline:var(--space-4);border-radius:999px;transform:translateY(10px);border-bottom-color:transparent;background:linear-gradient(to bottom,var(--glass-sheen) 0,transparent 62%),var(--glass-bg);backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);box-shadow:inset 0 0 0 1px var(--glass-rim),inset 0 1px 0 var(--glass-edge),var(--shadow-lg)}.site-bar:before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1.5px;background:conic-gradient(from var(--rim-angle,200deg),transparent 0deg,var(--glass-edge) 55deg,transparent 130deg,transparent 200deg,var(--glass-edge) 290deg,transparent 350deg);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:0;transition:opacity .4s ease;pointer-events:none}.site-header.is-condensed .site-bar:before{opacity:1}.site-header.is-condensed.has-lens .site-bar{background:linear-gradient(to bottom,var(--glass-sheen) 0,transparent 62%),var(--glass-bg-clear);backdrop-filter:url(#liquid-glass-lens) blur(var(--glass-blur)) contrast(1.15) brightness(1.05) saturate(1.2);-webkit-backdrop-filter:url(#liquid-glass-lens) blur(var(--glass-blur)) contrast(1.15) brightness(1.05) saturate(1.2);box-shadow:inset 0 0 0 1px var(--glass-rim),inset 0 1px 0 var(--glass-edge),inset 0 -10px 25px var(--glass-inner-shade),var(--shadow-lg)}.nav-desktop{display:flex}.nav-mobile-toggle{display:none}.nav-mobile-panel{position:absolute;top:100%;right:12px;width:max-content;min-width:148px;max-width:calc(100% - 24px);z-index:150;margin-top:8px;padding:var(--space-2);display:flex;flex-direction:column;gap:2px;border-radius:24px;pointer-events:auto;background:linear-gradient(to bottom,var(--glass-sheen) 0,transparent 62%),var(--glass-bg);backdrop-filter:blur(14px) saturate(180%);-webkit-backdrop-filter:blur(14px) saturate(180%);box-shadow:inset 0 0 0 1px var(--glass-rim),inset 0 1px 0 var(--glass-edge),inset 0 -10px 25px var(--glass-inner-shade),var(--shadow-lg);transform-origin:top right;animation:navPanelIn .42s cubic-bezier(.34,1.4,.44,1) both}.nav-mobile-panel.has-lens{background:linear-gradient(to bottom,var(--glass-sheen) 0,transparent 62%),var(--glass-bg-panel);backdrop-filter:url(#liquid-glass-lens-menu) blur(var(--glass-blur)) contrast(1.15) brightness(1.05) saturate(1.2);-webkit-backdrop-filter:url(#liquid-glass-lens-menu) blur(var(--glass-blur)) contrast(1.15) brightness(1.05) saturate(1.2)}.site-header.is-condensed .nav-mobile-panel{margin-top:18px}.nav-link-mobile{padding:var(--space-2) var(--space-4);white-space:nowrap;border-radius:14px;font-size:15px;color:var(--color-text);text-decoration:none;transition:background .18s ease,color .18s ease}.nav-mobile-highlight{position:absolute;left:var(--space-2);right:var(--space-2);top:0;border-radius:14px;background:color-mix(in srgb,var(--color-text) 10%,transparent);transition:transform .3s cubic-bezier(.34,1.32,.44,1),height .3s ease;pointer-events:none}.nav-link-mobile{position:relative;z-index:1}.nav-link-mobile.is-active,.nav-link-mobile:hover{color:var(--color-accent)}@keyframes navPanelIn{0%{opacity:0;transform:translateY(-14px) scale(.72)}60%{opacity:1}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes navPanelOut{0%{opacity:1;transform:translateY(0) scale(1)}30%{opacity:1;transform:translateY(3px) scale(1.05,.93)}to{opacity:0;transform:translateY(-14px) scale(.55,.62)}}.nav-mobile-panel.is-closing{animation:navPanelOut .3s cubic-bezier(.55,0,.85,.25) both;pointer-events:none}.site-header.has-motion.is-condensed .site-bar{transform-origin:right center;animation:dropletIn .85s linear both}.site-header.has-motion:not(.is-condensed) .site-bar{transform-origin:right center;animation:dropletOut .85s linear both}@keyframes dropletIn{0%{transform:translateY(0) scale(calc(1 + var(--droplet-amp) * 0),calc(1 + var(--droplet-amp) * 0))}5%{transform:translateY(.89px) scale(calc(1 + var(--droplet-amp) * -.0084),calc(1 + var(--droplet-amp) * .02626))}10%{transform:translateY(3.08px) scale(calc(1 + var(--droplet-amp) * -.01319),calc(1 + var(--droplet-amp) * .04121))}15%{transform:translateY(5.87px) scale(calc(1 + var(--droplet-amp) * -.01449),calc(1 + var(--droplet-amp) * .04528))}20%{transform:translateY(8.63px) scale(calc(1 + var(--droplet-amp) * -.013),calc(1 + var(--droplet-amp) * .04064))}25%{transform:translateY(10.89px) scale(calc(1 + var(--droplet-amp) * -.00971),calc(1 + var(--droplet-amp) * .03035))}30%{transform:translateY(12.42px) scale(calc(1 + var(--droplet-amp) * -.00564),calc(1 + var(--droplet-amp) * .01762))}35%{transform:translateY(13.13px) scale(calc(1 + var(--droplet-amp) * -.00168),calc(1 + var(--droplet-amp) * .00525))}40%{transform:translateY(13.13px) scale(calc(1 + var(--droplet-amp) * .00153),calc(1 + var(--droplet-amp) * -.00477))}45%{transform:translateY(12.6px) scale(calc(1 + var(--droplet-amp) * .00364),calc(1 + var(--droplet-amp) * -.01136))}50%{transform:translateY(11.77px) scale(calc(1 + var(--droplet-amp) * .00458),calc(1 + var(--droplet-amp) * -.01431))}55%{transform:translateY(10.86px) scale(calc(1 + var(--droplet-amp) * .0045),calc(1 + var(--droplet-amp) * -.01407))}60%{transform:translateY(10.04px) scale(calc(1 + var(--droplet-amp) * .00368),calc(1 + var(--droplet-amp) * -.01151))}65%{transform:translateY(9.43px) scale(calc(1 + var(--droplet-amp) * .00246),calc(1 + var(--droplet-amp) * -.00768))}70%{transform:translateY(9.07px) scale(calc(1 + var(--droplet-amp) * .00114),calc(1 + var(--droplet-amp) * -.00356))}75%{transform:translateY(8.97px) scale(calc(1 + var(--droplet-amp) * -.00003),calc(1 + var(--droplet-amp) * .00009))}80%{transform:translateY(9.06px) scale(calc(1 + var(--droplet-amp) * -.00089),calc(1 + var(--droplet-amp) * .00277))}85%{transform:translateY(9.29px) scale(calc(1 + var(--droplet-amp) * -.00137),calc(1 + var(--droplet-amp) * .00428))}90%{transform:translateY(9.58px) scale(calc(1 + var(--droplet-amp) * -.00149),calc(1 + var(--droplet-amp) * .00467))}95%{transform:translateY(9.87px) scale(calc(1 + var(--droplet-amp) * -.00133),calc(1 + var(--droplet-amp) * .00417))}to{transform:translateY(10px) scale(1)}}@keyframes dropletOut{0%{transform:translateY(10px) scale(calc(1 + var(--droplet-amp) * 0),calc(1 + var(--droplet-amp) * 0))}5%{transform:translateY(9.11px) scale(calc(1 + var(--droplet-amp) * .0084),calc(1 + var(--droplet-amp) * -.02626))}10%{transform:translateY(6.92px) scale(calc(1 + var(--droplet-amp) * .01319),calc(1 + var(--droplet-amp) * -.04121))}15%{transform:translateY(4.13px) scale(calc(1 + var(--droplet-amp) * .01449),calc(1 + var(--droplet-amp) * -.04528))}20%{transform:translateY(1.37px) scale(calc(1 + var(--droplet-amp) * .013),calc(1 + var(--droplet-amp) * -.04064))}25%{transform:translateY(-.89px) scale(calc(1 + var(--droplet-amp) * .00971),calc(1 + var(--droplet-amp) * -.03035))}30%{transform:translateY(-2.42px) scale(calc(1 + var(--droplet-amp) * .00564),calc(1 + var(--droplet-amp) * -.01762))}35%{transform:translateY(-3.13px) scale(calc(1 + var(--droplet-amp) * .00168),calc(1 + var(--droplet-amp) * -.00525))}40%{transform:translateY(-3.13px) scale(calc(1 + var(--droplet-amp) * -.00153),calc(1 + var(--droplet-amp) * .00477))}45%{transform:translateY(-2.6px) scale(calc(1 + var(--droplet-amp) * -.00364),calc(1 + var(--droplet-amp) * .01136))}50%{transform:translateY(-1.77px) scale(calc(1 + var(--droplet-amp) * -.00458),calc(1 + var(--droplet-amp) * .01431))}55%{transform:translateY(-.86px) scale(calc(1 + var(--droplet-amp) * -.0045),calc(1 + var(--droplet-amp) * .01407))}60%{transform:translateY(-.04px) scale(calc(1 + var(--droplet-amp) * -.00368),calc(1 + var(--droplet-amp) * .01151))}65%{transform:translateY(.57px) scale(calc(1 + var(--droplet-amp) * -.00246),calc(1 + var(--droplet-amp) * .00768))}70%{transform:translateY(.93px) scale(calc(1 + var(--droplet-amp) * -.00114),calc(1 + var(--droplet-amp) * .00356))}75%{transform:translateY(1.03px) scale(calc(1 + var(--droplet-amp) * .00003),calc(1 + var(--droplet-amp) * -.00009))}80%{transform:translateY(.94px) scale(calc(1 + var(--droplet-amp) * .00089),calc(1 + var(--droplet-amp) * -.00277))}85%{transform:translateY(.71px) scale(calc(1 + var(--droplet-amp) * .00137),calc(1 + var(--droplet-amp) * -.00428))}90%{transform:translateY(.42px) scale(calc(1 + var(--droplet-amp) * .00149),calc(1 + var(--droplet-amp) * -.00467))}95%{transform:translateY(.13px) scale(calc(1 + var(--droplet-amp) * .00133),calc(1 + var(--droplet-amp) * -.00417))}to{transform:translateY(0) scale(1)}}@property --rim-angle{syntax:"<angle>";inherits:false;initial-value:200deg}.site-header.has-motion.is-condensed .site-bar:before{animation:rimSweep .85s ease-out both}@keyframes rimSweep{0%{--rim-angle:200deg}to{--rim-angle:560deg}}@media (max-width:640px){.nav-desktop{display:none}.nav-mobile-toggle{display:inline-flex}.site-bar{padding-inline:var(--space-4)}.site-header.is-condensed .site-bar{width:calc(100% - 24px);margin-right:12px;border-radius:22px}}@media (prefers-reduced-motion:reduce){.site-bar{transition:none}.nav-mobile-panel,.site-header.has-motion.is-condensed .site-bar,.site-header.has-motion.is-condensed .site-bar:before,.site-header.has-motion:not(.is-condensed) .site-bar{animation:none}.nav-mobile-highlight{transition:none}.dialog-backdrop.is-closing,.dialog-backdrop.is-closing .dialog,.nav-mobile-panel.is-closing{animation:none;opacity:0}}@media (prefers-reduced-transparency:reduce){.site-header.is-condensed .site-bar,.site-header.is-condensed.has-lens .site-bar{background:var(--color-bg);backdrop-filter:none;-webkit-backdrop-filter:none}.site-header.is-condensed .site-bar:before{opacity:0}}.toc-mobile{display:none}.pd-grid .toc-desktop{max-height:calc(100vh - var(--header-h, 67px) - var(--space-8) - var(--space-4));overflow-y:auto}.pd-grid .toc-desktop,.proj-toc{scrollbar-width:thin;scrollbar-color:transparent transparent}.pd-grid .toc-desktop:focus-within,.pd-grid .toc-desktop:hover,.proj-toc:focus-within,.proj-toc:hover{scrollbar-color:color-mix(in srgb,var(--color-accent) 70%,transparent) transparent}.pd-grid .toc-desktop::-webkit-scrollbar,.proj-toc::-webkit-scrollbar{width:6px}.pd-grid .toc-desktop::-webkit-scrollbar-track,.proj-toc::-webkit-scrollbar-track{background:transparent}.pd-grid .toc-desktop::-webkit-scrollbar-thumb,.proj-toc::-webkit-scrollbar-thumb{background:transparent;border-radius:99px}.pd-grid .toc-desktop:hover::-webkit-scrollbar-thumb,.proj-toc:hover::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--color-accent) 70%,transparent)}.pd-grid .toc-desktop{transition:opacity .2s ease}html.search-open .pd-grid .toc-desktop{opacity:0;pointer-events:none}@media (max-width:800px){html.search-open .proj-sidebar{opacity:0;pointer-events:none}}@media (prefers-reduced-motion:reduce){.pd-grid .toc-desktop{transition:none}}.pd-grid{display:grid;grid-template-columns:1fr 200px;grid-gap:var(--space-8);gap:var(--space-8);max-width:940px;margin:0 auto;padding:var(--space-6);animation:pageFadeIn .5s ease both}.pd-body{min-width:0;--pd-text-opacity:0.88}@media (max-width:900px){.pd-grid{grid-template-columns:1fr}.toc-desktop{display:none!important}.toc-mobile{display:block}}.proj-grid{display:grid;grid-template-columns:260px 1fr;grid-gap:var(--space-8);gap:var(--space-8);max-width:960px;margin:0 auto;padding:var(--space-6)}.proj-sidebar{min-width:0;position:-webkit-sticky;position:sticky;top:calc(var(--header-h, 67px) + var(--space-2));align-self:start;transition:top .4s var(--bar-ease-size,ease),opacity .2s ease}@media (prefers-reduced-motion:reduce){.proj-sidebar{transition:none}}.proj-sidebar .toc-desktop{position:static!important}@media (min-width:801px){.proj-sidebar{display:flex;flex-direction:column;max-height:calc(100vh - var(--header-h, 67px) - var(--space-4))}html.header-condensed .proj-sidebar{top:var(--space-4);max-height:calc(100vh - var(--space-4) - var(--space-2))}.proj-toc{min-height:0;overflow-y:auto}}@media (min-width:801px) and (max-width:900px){.proj-sidebar .toc-desktop{display:block!important}.proj-sidebar .toc-mobile{display:none}}@media (max-width:800px){.proj-sidebar .toc-desktop{display:none!important}.proj-sidebar .toc-mobile{display:block}.proj-toc-skeleton{display:none}.proj-grid{grid-template-columns:1fr}.proj-sidebar{position:static;top:auto}.proj-grid{animation:pageFadeIn .4s ease both}}.skeleton{background:var(--color-surface);border-radius:var(--radius-md);animation:skeletonPulse 1.4s ease-in-out infinite}@keyframes skeletonPulse{0%,to{opacity:1}50%{opacity:.5}}@media (prefers-reduced-motion:reduce){.skeleton{animation:none;opacity:.7}}@media (prefers-reduced-motion:reduce){::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){animation:none!important}.proj-grid{animation:none}}@media (max-width:800px){::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){animation:none!important}}.img-placeholder{display:flex;align-items:center;justify-content:center;border:1px dashed var(--color-divider);border-radius:8px;color:color-mix(in srgb,var(--color-text) 45%,transparent);font-size:12.5px}.pd-body p{font-size:16px;line-height:1.8;opacity:var(--pd-text-opacity);margin:0 0 var(--space-6)}.pd-body h2{font-size:22px;margin-top:calc(var(--space-8) + var(--space-4));scroll-margin-top:90px}.proj-callout{padding:var(--space-4);border-radius:var(--radius-card);background:var(--color-surface);box-shadow:inset 3px 0 0 0 color-mix(in srgb,var(--color-accent) 55%,transparent),inset 0 0 0 1px var(--color-divider);margin:var(--space-4) 0}.proj-callout h2{font-size:18px;margin-top:0}.proj-callout>:last-child{margin-bottom:0}@media (max-width:640px){.proj-callout{padding:var(--space-3)}}.pd-body h3{font-size:18px;margin-top:var(--space-8);scroll-margin-top:90px}.pd-body blockquote{margin:var(--space-4) 0;padding:var(--space-3) var(--space-4);background:var(--color-accent-100);border-radius:var(--radius-md);font-style:italic;font-size:15px;color:var(--color-accent-800)}.pd-body blockquote p:last-child{margin-bottom:0}.pd-body img{border-radius:6px;margin:var(--space-4) auto;display:block;width:auto;max-width:100%;max-height:640px}.pd-body p:has(img+img){display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-3)}.pd-body p:has(img+img) img{margin:0;max-width:calc(50% - var(--space-3) / 2)}.pd-body p:has(>img:only-child):has(+p>img:only-child){margin-bottom:0}.pd-body p:has(>img:only-child):has(+p>img:only-child)>img{margin-bottom:var(--space-2)}.pd-body p:has(>img:only-child)+p:has(>img:only-child)>img{margin-top:0}.pd-body p>img+br:has(+img){display:none}.pd-body p>img:has(+br+img){margin-bottom:var(--space-2)}.pd-body p>img+br+img{margin-top:0}.pd-body ol,.pd-body ul{padding-left:1.4em;font-size:16px;line-height:1.8;opacity:var(--pd-text-opacity);margin-top:var(--space-2)}.pd-body li ol,.pd-body li ul{margin-top:0}.pd-body p:has(+ol),.pd-body p:has(+ul){margin-bottom:var(--space-2)}.pd-body li+li{margin-top:var(--space-2)}.pd-body code:not(pre code){font-family:var(--font-mono);font-size:.85em;background:var(--color-surface);padding:.15em .4em;border-radius:4px}.pd-body table{display:block;width:max-content;max-width:100%;overflow-x:auto;border-collapse:collapse;margin:var(--space-4) 0;font-size:14px}.pd-body td,.pd-body th{border:1px solid var(--color-divider);padding:6px 12px;text-align:left}.pd-body thead th{background:var(--color-surface);font-weight:600}.pd-body tbody tr:nth-child(2n){background:color-mix(in srgb,var(--color-surface) 50%,transparent)}.code-block{background:#282c34;border-radius:8px;overflow:hidden;margin:var(--space-4) 0;box-shadow:var(--shadow-md)}.code-block-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-3);background:#3a3a3a}.code-block-dots{display:flex;align-items:center;gap:8px}.code-block-dot{width:12px;height:12px;border-radius:50%;display:block}.code-block-lang{font-size:11px;color:#9ca3af;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.04em}.code-block-copy{border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border-radius:4px;color:#9ca3af;background:none;transition:background .25s ease,color .25s ease}.code-block-copy.copied{background:var(--color-accent-600);color:#fff}.code-block pre{margin:0;padding:var(--space-4) var(--space-3);overflow-x:auto;font-family:var(--font-mono);font-size:13px;line-height:1.6;color:#d4d4d8;-webkit-text-size-adjust:100%;text-size-adjust:100%}.wp-title{width:100%;border:none;outline:none;background:transparent;resize:none;font-family:var(--font-heading);font-weight:600;font-size:30px;color:var(--color-text);line-height:1.3;overflow:hidden}.wp-title::placeholder{color:var(--color-text);opacity:.35}.wp-body{width:100%;border:none;outline:none;background:transparent;resize:none;font-family:var(--font-mono);font-size:13.5px;line-height:1.7;color:var(--color-text)}.wp-body::placeholder{opacity:.4}.wp-toolbar-btn{border:none;background:none;color:var(--color-text);opacity:.7;cursor:pointer;width:26px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:4px}.wp-toolbar-btn:hover{opacity:1;background:color-mix(in srgb,var(--color-text) 8%,transparent)}.wp-toolbar-divider{width:1px;height:16px;background:var(--color-divider);margin:0 4px}.wp-split{display:grid;grid-template-columns:1fr 1fr;grid-gap:var(--space-6);gap:var(--space-6);align-items:start}.wp-split>*{min-width:0}@media (max-width:900px){.wp-split{grid-template-columns:1fr;gap:var(--space-5)}}.nav-mobile-panel:not(.has-lens),.scroll-top-btn:not(.has-lens),.search-backdrop .dialog:not(.has-lens),.site-header.is-condensed:not(.has-lens) .site-bar{background:linear-gradient(to bottom,var(--glass-sheen) 0,transparent 62%),var(--glass-bg-fallback);backdrop-filter:blur(10px) saturate(190%) contrast(1.08) brightness(1.03);-webkit-backdrop-filter:blur(10px) saturate(190%) contrast(1.08) brightness(1.03);box-shadow:inset 0 0 0 1px var(--glass-rim),inset 0 1px 0 var(--glass-edge),inset 7px 0 14px -9px var(--glass-edge),inset -7px 0 14px -9px var(--glass-edge),inset 0 -10px 25px var(--glass-inner-shade),var(--shadow-lg)}.PhotoView-Portal{direction:ltr;height:100%;left:0;overflow:hidden;position:fixed;top:0;touch-action:none;width:100%;z-index:2000}@keyframes PhotoView__rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes PhotoView__delayIn{0%,50%{opacity:0}to{opacity:1}}.PhotoView__Spinner{animation:PhotoView__delayIn .4s linear both}.PhotoView__Spinner svg{animation:PhotoView__rotate .6s linear infinite}.PhotoView__Photo{cursor:-webkit-grab;cursor:grab;max-width:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.PhotoView__Photo:active{cursor:-webkit-grabbing;cursor:grabbing}.PhotoView__icon{display:inline-block;left:0;position:absolute;top:0;transform:translate(-50%,-50%)}.PhotoView__PhotoBox,.PhotoView__PhotoWrap{bottom:0;direction:ltr;left:0;position:absolute;right:0;top:0;touch-action:none;width:100%}.PhotoView__PhotoWrap{overflow:hidden;z-index:10}.PhotoView__PhotoBox{transform-origin:left top}@keyframes PhotoView__fade{0%{opacity:0}to{opacity:1}}.PhotoView-Slider__clean .PhotoView-Slider__ArrowLeft,.PhotoView-Slider__clean .PhotoView-Slider__ArrowRight,.PhotoView-Slider__clean .PhotoView-Slider__BannerWrap,.PhotoView-Slider__clean .PhotoView-Slider__Overlay,.PhotoView-Slider__willClose .PhotoView-Slider__BannerWrap:hover{opacity:0}.PhotoView-Slider__Backdrop{background:#000;height:100%;left:0;position:absolute;top:0;transition-property:background-color;width:100%;z-index:-1}.PhotoView-Slider__fadeIn{animation:PhotoView__fade linear both;opacity:0}.PhotoView-Slider__fadeOut{animation:PhotoView__fade linear reverse both;opacity:0}.PhotoView-Slider__BannerWrap{align-items:center;background-color:rgba(0,0,0,.5);color:#fff;display:flex;height:44px;justify-content:space-between;left:0;position:absolute;top:0;transition:opacity .2s ease-out;width:100%;z-index:20}.PhotoView-Slider__BannerWrap:hover{opacity:1}.PhotoView-Slider__Counter{font-size:14px;opacity:.75;padding:0 10px}.PhotoView-Slider__BannerRight{align-items:center;display:flex;height:100%}.PhotoView-Slider__toolbarIcon{fill:#fff;box-sizing:border-box;cursor:pointer;opacity:.75;padding:10px;transition:opacity .2s linear}.PhotoView-Slider__toolbarIcon:hover{opacity:1}.PhotoView-Slider__ArrowLeft,.PhotoView-Slider__ArrowRight{align-items:center;bottom:0;cursor:pointer;display:flex;height:100px;justify-content:center;margin:auto;opacity:.75;position:absolute;top:0;transition:opacity .2s linear;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:70px;z-index:20}.PhotoView-Slider__ArrowLeft:hover,.PhotoView-Slider__ArrowRight:hover{opacity:1}.PhotoView-Slider__ArrowLeft svg,.PhotoView-Slider__ArrowRight svg{fill:#fff;background:rgba(0,0,0,.3);box-sizing:content-box;height:24px;padding:10px;width:24px}.PhotoView-Slider__ArrowLeft{left:0}.PhotoView-Slider__ArrowRight{right:0}