:root{--bg: #FBFBFA;--panel: #F3F3F1;--ink: #131414;--muted: #6C6F6C;--faint: #A0A3A0;--rule: #E4E4E1;--accent-l: #3D5AE0;--accent-d: #8098F5;--accent: var(--accent-l);--accent-soft: color-mix(in srgb, var(--accent) 11%, transparent);--display: "Space Grotesk", system-ui, sans-serif;--body: "Inter Tight", system-ui, sans-serif;--mono: "JetBrains Mono", ui-monospace, monospace;--reading: "Newsreader", Georgia, "Times New Roman", serif;--ease: cubic-bezier(.16, 1, .3, 1);--maxw: 1440px}[data-theme=dark]{--bg: #0C0D0C;--panel: #141614;--ink: #ECEEEC;--muted: #909390;--faint: #5C5F5C;--rule: #222421;--accent: var(--accent-d);--accent-soft: color-mix(in srgb, var(--accent) 16%, transparent)}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--body);font-size:1.12rem;line-height:1.65;-webkit-font-smoothing:antialiased;transition:background .5s var(--ease),color .5s var(--ease)}::selection{background:var(--accent);color:var(--bg)}a{color:inherit;text-decoration:none}img{max-width:100%;height:auto}.mono{font-family:var(--mono);font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;font-weight:500}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px}.skip-link{position:absolute;left:-999px;top:0;z-index:200;background:var(--accent);color:var(--bg);padding:.6rem 1rem;font-family:var(--mono);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase}.skip-link:focus{left:.5rem;top:.5rem}#progress{position:fixed;top:0;left:0;height:2px;width:0;background:var(--accent);z-index:100;opacity:0;transition:opacity .3s}header.bar{--bar-gutter: max(0px, (100% - var(--maxw)) / 2);position:sticky;top:0;z-index:60;height:56px;display:flex;align-items:center;justify-content:space-between;padding-left:calc(var(--bar-gutter) + clamp(1.2rem,4vw,2.4rem));padding-right:calc(var(--bar-gutter) + clamp(1.4rem,5vw,4rem));background:color-mix(in srgb,var(--bg) 85%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--rule)}.wordmark{font-family:var(--display);font-weight:700;font-size:1.12rem;letter-spacing:-.02em;display:inline-flex;align-items:center;gap:.5rem}.wordmark .sq{width:9px;height:9px;background:var(--accent);display:inline-block}header .right{display:flex;gap:1.1rem;align-items:center}.toggle{width:28px;height:28px;border:1px solid var(--rule);border-radius:6px;background:transparent;cursor:pointer;display:grid;place-items:center;color:var(--muted);transition:all .3s}.toggle:hover{color:var(--accent);border-color:var(--accent)}.toggle svg{width:14px;height:14px}.toggle .icon-dark{display:none}[data-theme=dark] .toggle .icon-dark{display:block}[data-theme=dark] .toggle .icon-light{display:none}.shell{display:grid;grid-template-columns:244px minmax(0,1fr);max-width:var(--maxw);margin:0 auto;align-items:start}.rail{position:sticky;top:56px;align-self:start;padding:clamp(1.6rem,4vw,2.6rem) 1.4rem clamp(1.6rem,4vw,2.6rem) clamp(1.2rem,4vw,2.4rem);border-right:1px solid var(--rule);min-height:calc(100vh - 56px);max-height:calc(100vh - 56px);overflow-y:auto;display:flex;flex-direction:column}.nav{display:flex;flex-direction:column;gap:.1rem;margin-bottom:1.8rem}.nav a{font-family:var(--mono);font-size:.72rem;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);padding:.5rem .6rem;border-radius:6px;transition:all .2s;display:flex;align-items:center;gap:.6rem}.nav a .n{color:var(--faint);font-size:.62rem}.nav a:hover{background:var(--panel);color:var(--ink)}.nav a.active{color:var(--accent);background:var(--accent-soft)}.nav a.active .n{color:var(--accent)}.rail-ctx:not(:empty){padding-top:1.6rem;border-top:1px solid var(--rule)}.ctx-label{color:var(--faint);margin-bottom:1rem}.filters{display:flex;flex-direction:column;gap:.1rem}.filters a{font-family:var(--mono);font-size:.72rem;letter-spacing:.04em;color:var(--muted);padding:.5rem .6rem;border-radius:6px;transition:all .2s;display:flex;justify-content:space-between}.filters a:hover{background:var(--panel);color:var(--ink)}.filters a.active{color:var(--accent);background:var(--accent-soft)}.filters a .c{color:var(--faint)}.toc{display:flex;flex-direction:column;gap:.15rem}.toc a{font-size:.82rem;color:var(--muted);padding:.42rem .7rem;border-left:2px solid var(--rule);transition:all .2s;line-height:1.3}.toc a:hover{color:var(--ink)}.toc a.active{color:var(--accent);border-left-color:var(--accent)}.toc a.toc-h3{padding-left:1.5rem;font-size:.76rem;color:var(--faint)}.toc a.toc-h3:hover{color:var(--muted)}.toc a.toc-h3.active{color:var(--accent)}.soc{margin-top:auto;padding-top:2rem;display:flex;flex-direction:column;gap:.55rem}.soc a{font-family:var(--mono);font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);transition:color .2s}.soc a:hover{color:var(--accent)}.soc-foot{display:none}.content{padding:clamp(2rem,5vw,3.5rem) clamp(1.4rem,5vw,4rem);min-width:0}.reveal{animation:revealIn .55s var(--ease) both}.reveal:nth-child(2){animation-delay:.05s}.reveal:nth-child(3){animation-delay:.1s}.reveal:nth-child(4){animation-delay:.15s}.reveal:nth-child(5){animation-delay:.2s}@keyframes revealIn{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.hero{max-width:34ch;margin-bottom:3.4rem}.hero h1{font-family:var(--display);font-weight:600;font-size:clamp(2rem,5vw,3rem);line-height:1.06;letter-spacing:-.03em}.hero p{color:var(--muted);margin-top:1.2rem;font-size:1.12rem;max-width:46ch}.hero .cta{margin-top:1.8rem;display:flex;gap:1.4rem;align-items:center}.hero .cta a{font-family:var(--mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink);display:inline-flex;align-items:center;gap:.45rem;transition:gap .25s,color .25s}.hero .cta a .arr{color:var(--accent);transition:transform .25s var(--ease)}.hero .cta a:hover{color:var(--accent)}.hero .cta a:hover .arr{transform:translate(4px)}.hero .cta a.ghost{color:var(--muted)}.sec-head{display:flex;align-items:baseline;justify-content:space-between;margin:0 0 1rem;padding-bottom:.8rem;border-bottom:1px solid var(--ink)}.sec-head h2{font-family:var(--display);font-weight:600;font-size:1.05rem;letter-spacing:-.01em}.sec-head a{color:var(--muted);transition:color .2s}.sec-head a:hover{color:var(--accent)}.block{margin-bottom:3.4rem}.tbl-head{display:grid;grid-template-columns:46px 1fr 130px 90px;gap:1rem;padding:0 0 .8rem;border-bottom:1px solid var(--ink);color:var(--faint)}.row{display:grid;grid-template-columns:46px 1fr 130px 90px;gap:1rem;align-items:baseline;padding:1.4rem 0;border-bottom:1px solid var(--rule);position:relative;transition:background .3s var(--ease)}.row:after{content:"";position:absolute;left:-1rem;top:0;bottom:0;width:2px;background:var(--accent);transform:scaleY(0);transform-origin:top;transition:transform .3s var(--ease)}.row:hover{background:var(--panel)}.row:hover:after{transform:scaleY(1)}.row .idx{font-family:var(--mono);font-size:.72rem;color:var(--faint)}.row .t{min-width:0}.row .t .title{font-family:var(--display);font-weight:500;font-size:1.22rem;letter-spacing:-.01em;line-height:1.2;transition:color .25s}.row:hover .t .title{color:var(--accent)}.row .t .desc{color:var(--muted);font-size:.95rem;margin-top:.25rem}.row .topic{font-family:var(--mono);font-size:.64rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.row .date{font-family:var(--mono);font-size:.66rem;letter-spacing:.06em;color:var(--faint)}.page-title{font-family:var(--display);font-weight:600;font-size:clamp(1.7rem,4vw,2.3rem);letter-spacing:-.025em;line-height:1.05;margin-bottom:.6rem}.page-sub{color:var(--muted);max-width:50ch;margin-bottom:2.6rem}.proj-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1px;background:var(--rule);border:1px solid var(--rule)}.proj{background:var(--bg);padding:1.8rem;display:flex;flex-direction:column;gap:.8rem;transition:background .3s var(--ease);position:relative;min-height:200px}.proj:hover{background:var(--panel)}.proj .meta{display:flex;justify-content:space-between;align-items:center;color:var(--faint)}.proj .meta .st{color:var(--accent)}.proj h3{font-family:var(--display);font-weight:600;font-size:1.4rem;letter-spacing:-.02em;transition:color .25s}.proj:hover h3{color:var(--accent)}.proj p{color:var(--muted);font-size:.98rem;flex:1}.proj .stack{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.3rem}.proj .stack span{font-family:var(--mono);font-size:.6rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border:1px solid var(--rule);border-radius:999px;padding:.25rem .6rem}.proj .go{position:absolute;top:1.8rem;right:1.8rem;color:var(--faint);opacity:0;transform:translate(-4px,4px);transition:all .3s var(--ease)}.proj:hover .go,.proj:focus-visible .go{opacity:1;transform:none;color:var(--accent)}.about{max-width:none}.about .lead{font-family:var(--display);font-weight:500;font-size:clamp(1.5rem,3.4vw,2rem);line-height:1.22;letter-spacing:-.02em;margin-bottom:1.8rem}.about p{font-family:var(--reading);font-optical-sizing:auto;color:var(--muted);margin-bottom:1.3rem;font-size:1.18rem;line-height:1.6}.about p strong{color:var(--ink);font-weight:600}.about p a{color:var(--accent);text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px}.exp{display:flex;flex-direction:column}.exp .item{display:grid;grid-template-columns:160px 1fr;gap:1.2rem;padding:1.3rem 0;border-bottom:1px solid var(--rule)}.exp .item:first-child{border-top:1px solid var(--rule)}.exp .yr{font-family:var(--mono);font-size:.66rem;letter-spacing:.06em;color:var(--faint);padding-top:.2rem;white-space:nowrap}.exp .role{font-family:var(--display);font-weight:600;font-size:1.12rem;letter-spacing:-.01em}.exp .org{color:var(--accent);font-size:.92rem;margin:.1rem 0 .4rem}.exp .note{color:var(--muted);font-size:.96rem}.back{font-family:var(--mono);font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:2rem;display:inline-block;transition:color .2s}.back:hover{color:var(--accent)}.art{max-width:none}.art .tags{color:var(--accent);margin-bottom:1.2rem;display:block}.art h1{font-family:var(--display);font-weight:600;font-size:clamp(2rem,5vw,3.2rem);line-height:1.04;letter-spacing:-.03em}.art .byline{margin:1.4rem 0 0;padding-bottom:1.6rem;border-bottom:1px solid var(--rule);font-family:var(--mono);font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);display:flex;gap:1rem;align-items:center;flex-wrap:wrap}.art .byline .dot{width:3px;height:3px;border-radius:50%;background:var(--faint)}.art-next{margin-top:3.4rem;padding-top:1.6rem;border-top:1px solid var(--ink);display:flex;justify-content:space-between;align-items:baseline;transition:color .2s}.art-next:hover .nx-title{color:var(--accent)}.art-next .nx-title{font-family:var(--display);font-weight:600;font-size:1.3rem;letter-spacing:-.02em;transition:color .25s}.art-next .arr{color:var(--accent)}.endmark{font-family:var(--mono);color:var(--accent);margin-top:1.6rem;letter-spacing:.15em;font-size:.8rem}.prose{padding-top:2rem;font-size:1.18rem;counter-reset:h2;font-family:var(--reading);font-optical-sizing:auto;line-height:1.7}.prose p{margin:0 0 1.4rem}.prose h2,.prose h3,.prose h4{font-family:var(--display);font-weight:600;letter-spacing:-.02em;scroll-margin-top:80px;line-height:1.2}.prose h2{display:flex;align-items:baseline;gap:.7rem}.prose h2:before{content:counter(h2,decimal-leading-zero);counter-increment:h2;font-family:var(--mono);font-size:.66rem;font-weight:500;color:var(--accent);flex-shrink:0;position:relative;top:-.05em}.prose h2{font-size:1.5rem;margin:2.6rem 0 1rem}.prose h3{font-size:1.22rem;margin:2.2rem 0 .9rem}.prose h4{font-size:1.05rem;margin:1.8rem 0 .8rem}.prose a{color:var(--accent);text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px;transition:opacity .2s}.prose a:hover{opacity:.7}.prose em{font-style:italic}.prose strong{font-weight:600;color:var(--ink)}.prose ul,.prose ol{margin:0 0 1.4rem;padding-left:0;list-style:none}.prose ul li,.prose ol li{position:relative;padding-left:1.5rem;margin-bottom:.7rem}.prose ul li:before{content:"";position:absolute;left:0;top:.68em;width:7px;height:7px;background:var(--accent)}.prose ol{counter-reset:li}.prose ol li:before{content:counter(li);counter-increment:li;position:absolute;left:0;top:0;font-family:var(--mono);font-size:.72rem;color:var(--accent);line-height:1.9}.prose ul ul,.prose ol ol,.prose ul ol,.prose ol ul{margin:.7rem 0 0}.prose blockquote{margin:0 0 1.4rem;padding:.2rem 0 .2rem 1.4rem;border-left:2px solid var(--accent);color:var(--muted);font-style:italic}.prose hr{border:none;border-top:1px solid var(--rule);margin:2.4rem 0}.prose img{display:block;border:1px solid var(--rule);border-radius:8px;margin:1.8rem 0;max-width:100%}.prose figure{margin:1.8rem 0}.prose figcaption{color:var(--faint);font-size:.85rem;text-align:center;margin-top:.6rem}.prose :not(pre)>code{font-family:var(--mono);font-size:.82em;background:var(--panel);border:1px solid var(--rule);border-radius:5px;padding:.12em .4em;color:var(--ink);word-break:break-word}.prose pre{font-family:var(--mono);font-size:.9rem;line-height:1.6;padding:1.1rem 1.3rem;border-radius:10px;border:1px solid var(--rule);overflow-x:auto;margin:0 0 1.6rem;scrollbar-width:thin}.prose pre code{font-family:inherit;font-size:inherit;background:none;border:none;padding:0}.prose pre.astro-code,.prose pre.astro-code span{color:var(--shiki-light);background-color:var(--shiki-light-bg)}[data-theme=dark] .prose pre.astro-code,[data-theme=dark] .prose pre.astro-code span{color:var(--shiki-dark);background-color:var(--shiki-dark-bg)}.prose table{width:100%;border-collapse:collapse;margin:0 0 1.6rem;font-size:.95rem}.prose th,.prose td{text-align:left;padding:.6rem .8rem;border-bottom:1px solid var(--rule)}.prose th{font-family:var(--mono);font-size:.7rem;letter-spacing:.06em;text-transform:uppercase;color:var(--faint)}.callout{white-space:pre-wrap;display:flex;align-items:flex-start;gap:.6rem;background:var(--panel);border:1px solid var(--rule);border-radius:8px;padding:1rem 1.1rem;margin:0 0 1.4rem;font-size:1rem;line-height:1.55;color:var(--ink)}.callout code{font-family:var(--mono);font-size:.85em;background:var(--bg);border:1px solid var(--rule);border-radius:4px;padding:.1em .35em}.callout a{color:var(--accent);text-decoration:underline}.callout-icon{flex-shrink:0;max-width:1.2em;max-height:1.2em}@media(max-width:820px){.shell{grid-template-columns:minmax(0,1fr)}.rail{position:static;min-height:auto;max-height:none;overflow:visible;border-right:none;border-bottom:1px solid var(--rule);flex-direction:row;flex-wrap:wrap;gap:.8rem 1.2rem;align-items:center;padding:1rem clamp(1.1rem,5vw,2.4rem)}.nav{flex-direction:row;flex-wrap:nowrap;margin-bottom:0;gap:.3rem;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.nav::-webkit-scrollbar{display:none}.nav a{flex-shrink:0;white-space:nowrap}.rail-ctx{width:100%;padding-top:1rem;border-top:none}.rail-ctx:not(:has(*)){display:none}.filters{flex-direction:row;flex-wrap:wrap}.filters a{justify-content:flex-start;gap:.45rem}.rail-ctx:has(.toc){display:none}.soc{display:none}.tbl-head{grid-template-columns:36px 1fr}.tbl-head .h-topic,.tbl-head .h-date{display:none}.row{grid-template-columns:36px 1fr}.row .topic,.row .date{display:none}.proj-grid{grid-template-columns:1fr}.exp .item{grid-template-columns:1fr;gap:.3rem}.nav a{min-height:44px}.soc-foot{display:flex;flex-wrap:nowrap;justify-content:center;gap:1.4rem;padding:.4rem clamp(1.1rem,5vw,4rem) 1.6rem;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.soc-foot::-webkit-scrollbar{display:none}.soc-foot a{flex-shrink:0;white-space:nowrap;display:inline-flex;align-items:center;min-height:44px;font-family:var(--mono);font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);transition:color .2s}.soc-foot a:hover{color:var(--accent)}}@media(max-width:540px){.content{padding:1.6rem 1.1rem 1.4rem}.block{margin-bottom:2.4rem}.art .tags{display:none}.rail-ctx:has(.filters){display:none}body{font-size:1.06rem}.prose{font-size:1.1rem;padding-top:1.4rem}.prose h2{font-size:1.32rem;margin:2.2rem 0 .9rem}.prose h3{font-size:1.14rem}.hero{margin-bottom:2.6rem}.hero p{font-size:1.06rem}.page-sub{margin-bottom:2rem}.back{padding:.5rem 0}.toggle{width:36px;height:36px}.art .byline{gap:.6rem .9rem}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important;animation:none!important}.reveal{opacity:1!important;transform:none!important}}
