: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);-webkit-font-smoothing:antialiased;transition:background .5s var(--ease), color .5s var(--ease);font-size:1.12rem;line-height:1.65}::selection{background:var(--accent);color:var(--bg)}a{color:inherit;text-decoration:none}img{max-width:100%;height:auto}.mono{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;font-size:.66rem;font-weight:500}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px}.skip-link{z-index:200;background:var(--accent);color:var(--bg);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;padding:.6rem 1rem;font-size:.7rem;position:absolute;top:0;left:-999px}.skip-link:focus{top:.5rem;left:.5rem}#progress{background:var(--accent);z-index:100;opacity:0;width:0;height:2px;transition:opacity .3s;position:fixed;top:0;left:0}header.bar{--bar-gutter:max(0px, (100% - var(--maxw)) / 2);z-index:60;height:56px;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);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--rule);justify-content:space-between;align-items:center;display:flex;position:sticky;top:0}.wordmark{font-family:var(--display);letter-spacing:-.02em;align-items:center;gap:.5rem;font-size:1.12rem;font-weight:700;display:inline-flex}.wordmark .sq{background:var(--accent);width:9px;height:9px;display:inline-block}header .right{align-items:center;gap:1.1rem;display:flex}.toggle{border:1px solid var(--rule);cursor:pointer;width:28px;height:28px;color:var(--muted);background:0 0;border-radius:6px;place-items:center;transition:all .3s;display:grid}.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{max-width:var(--maxw);grid-template-columns:244px minmax(0,1fr);align-items:start;margin:0 auto;display:grid}.rail{border-right:1px solid var(--rule);flex-direction:column;align-self:start;min-height:calc(100vh - 56px);max-height:calc(100vh - 56px);padding:clamp(1.6rem,4vw,2.6rem) 1.4rem clamp(1.6rem,4vw,2.6rem) clamp(1.2rem,4vw,2.4rem);display:flex;position:sticky;top:56px;overflow-y:auto}.nav{flex-direction:column;gap:.1rem;margin-bottom:1.8rem;display:flex}.nav a{font-family:var(--mono);letter-spacing:.04em;text-transform:uppercase;color:var(--muted);border-radius:6px;align-items:center;gap:.6rem;padding:.5rem .6rem;font-size:.72rem;transition:all .2s;display:flex}.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){border-top:1px solid var(--rule);padding-top:1.6rem}.ctx-label{color:var(--faint);margin-bottom:1rem}.filters{flex-direction:column;gap:.1rem;display:flex}.filters a{font-family:var(--mono);letter-spacing:.04em;color:var(--muted);border-radius:6px;justify-content:space-between;padding:.5rem .6rem;font-size:.72rem;transition:all .2s;display:flex}.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{flex-direction:column;gap:.15rem;display:flex}.toc a{color:var(--muted);border-left:2px solid var(--rule);padding:.42rem .7rem;font-size:.82rem;line-height:1.3;transition:all .2s}.toc a:hover{color:var(--ink)}.toc a.active{color:var(--accent);border-left-color:var(--accent)}.toc a.toc-h3{color:var(--faint);padding-left:1.5rem;font-size:.76rem}.toc a.toc-h3:hover{color:var(--muted)}.toc a.toc-h3.active{color:var(--accent)}.soc{flex-direction:column;gap:.55rem;margin-top:auto;padding-top:2rem;display:flex}.soc a{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-size:.66rem;transition:color .2s}.soc a:hover{color:var(--accent)}.soc-foot{display:none}.content{min-width:0;padding:clamp(2rem,5vw,3.5rem) clamp(1.4rem,5vw,4rem)}.reveal{animation:revealIn .55s var(--ease) both}.reveal:nth-child(2){animation-delay:50ms}.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);letter-spacing:-.03em;font-size:clamp(2rem,5vw,3rem);font-weight:600;line-height:1.06}.hero p{color:var(--muted);max-width:46ch;margin-top:1.2rem;font-size:1.12rem}.hero .cta{align-items:center;gap:1.4rem;margin-top:1.8rem;display:flex}.hero .cta a{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink);align-items:center;gap:.45rem;font-size:.68rem;transition:gap .25s,color .25s;display:inline-flex}.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{border-bottom:1px solid var(--ink);justify-content:space-between;align-items:baseline;margin:0 0 1rem;padding-bottom:.8rem;display:flex}.sec-head h2{font-family:var(--display);letter-spacing:-.01em;font-size:1.05rem;font-weight:600}.sec-head a{color:var(--muted);transition:color .2s}.sec-head a:hover{color:var(--accent)}.block{margin-bottom:3.4rem}.tbl-head{border-bottom:1px solid var(--ink);color:var(--faint);grid-template-columns:46px 1fr 130px 90px;gap:1rem;padding:0 0 .8rem;display:grid}.row{border-bottom:1px solid var(--rule);transition:background .3s var(--ease);grid-template-columns:46px 1fr 130px 90px;align-items:baseline;gap:1rem;padding:1.4rem 0;display:grid;position:relative}.row:after{content:"";background:var(--accent);transform-origin:top;width:2px;transition:transform .3s var(--ease);position:absolute;top:0;bottom:0;left:-1rem;transform:scaleY(0)}.row:hover{background:var(--panel)}.row:hover:after{transform:scaleY(1)}.row .idx{font-family:var(--mono);color:var(--faint);font-size:.72rem}.row .t{min-width:0}.row .t .title{font-family:var(--display);letter-spacing:-.01em;font-size:1.22rem;font-weight:500;line-height:1.2;transition:color .25s}.row:hover .t .title{color:var(--accent)}.row .t .desc{color:var(--muted);margin-top:.25rem;font-size:.95rem}.row .topic{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-size:.64rem}.row .date{font-family:var(--mono);letter-spacing:.06em;color:var(--faint);font-size:.66rem}.page-title{font-family:var(--display);letter-spacing:-.025em;margin-bottom:.6rem;font-size:clamp(1.7rem,4vw,2.3rem);font-weight:600;line-height:1.05}.page-sub{color:var(--muted);max-width:50ch;margin-bottom:2.6rem}.proj-grid{background:var(--rule);border:1px solid var(--rule);grid-template-columns:repeat(2,1fr);gap:1px;display:grid}.proj{background:var(--bg);transition:background .3s var(--ease);flex-direction:column;gap:.8rem;min-height:200px;padding:1.8rem;display:flex;position:relative}.proj:hover{background:var(--panel)}.proj .meta{color:var(--faint);justify-content:space-between;align-items:center;display:flex}.proj .meta .st{color:var(--accent)}.proj h3{font-family:var(--display);letter-spacing:-.02em;font-size:1.4rem;font-weight:600;transition:color .25s}.proj:hover h3{color:var(--accent)}.proj p{color:var(--muted);flex:1;font-size:.98rem}.proj .stack{flex-wrap:wrap;gap:.5rem;margin-top:.3rem;display:flex}.proj .stack span{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border:1px solid var(--rule);border-radius:999px;padding:.25rem .6rem;font-size:.6rem}.proj .go{color:var(--faint);opacity:0;transition:all .3s var(--ease);position:absolute;bottom:1.8rem;right:1.8rem;transform:translate(-4px,4px)}.proj:hover .go,.proj:focus-visible .go{opacity:1;color:var(--accent);transform:none}.about{max-width:none}.about .lead{font-family:var(--display);letter-spacing:-.02em;margin-bottom:1.8rem;font-size:clamp(1.5rem,3.4vw,2rem);font-weight:500;line-height:1.22}.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-underline-offset:2px;text-decoration:underline 1px}.exp{flex-direction:column;display:flex}.exp .item{border-bottom:1px solid var(--rule);grid-template-columns:160px 1fr;gap:1.2rem;padding:1.3rem 0;display:grid}.exp .item:first-child{border-top:1px solid var(--rule)}.exp .yr{font-family:var(--mono);letter-spacing:.06em;color:var(--faint);white-space:nowrap;padding-top:.2rem;font-size:.66rem}.exp .role{font-family:var(--display);letter-spacing:-.01em;font-size:1.12rem;font-weight:600}.exp .org{color:var(--accent);margin:.1rem 0 .4rem;font-size:.92rem}.exp .note{color:var(--muted);font-size:.96rem}.back{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:2rem;font-size:.66rem;transition:color .2s;display:inline-block}.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);letter-spacing:-.03em;font-size:clamp(2rem,5vw,3.2rem);font-weight:600;line-height:1.04}.art .byline{border-bottom:1px solid var(--rule);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);flex-wrap:wrap;align-items:center;gap:1rem;margin:1.4rem 0 0;padding-bottom:1.6rem;font-size:.68rem;display:flex}.art .byline .dot{background:var(--faint);border-radius:50%;width:3px;height:3px}.art-next{border-top:1px solid var(--ink);justify-content:space-between;align-items:baseline;margin-top:3.4rem;padding-top:1.6rem;transition:color .2s;display:flex}.art-next:hover .nx-title{color:var(--accent)}.art-next .nx-title{font-family:var(--display);letter-spacing:-.02em;font-size:1.3rem;font-weight:600;transition:color .25s}.art-next .arr{color:var(--accent)}.endmark{font-family:var(--mono);color:var(--accent);letter-spacing:.15em;margin-top:1.6rem;font-size:.8rem}.prose{counter-reset:h2;font-size:1.18rem;font-family:var(--reading);font-optical-sizing:auto;padding-top:2rem;line-height:1.7}.prose p{margin:0 0 1.4rem}.prose h2,.prose h3,.prose h4{font-family:var(--display);letter-spacing:-.02em;scroll-margin-top:80px;font-weight:600;line-height:1.2}.prose h2{align-items:baseline;gap:.7rem;display:flex}.prose h2:before{content:counter(h2, decimal-leading-zero);counter-increment:h2;font-family:var(--mono);color:var(--accent);flex-shrink:0;font-size:.66rem;font-weight:500;position:relative;top:-.05em}.prose h2{margin:2.6rem 0 1rem;font-size:1.5rem}.prose h3{margin:2.2rem 0 .9rem;font-size:1.22rem}.prose h4{margin:1.8rem 0 .8rem;font-size:1.05rem}.prose a{color:var(--accent);text-underline-offset:2px;text-decoration:underline 1px;transition:opacity .2s}.prose a:hover{opacity:.7}.prose em{font-style:italic}.prose strong{color:var(--ink);font-weight:600}.prose ul,.prose ol{margin:0 0 1.4rem;padding-left:0;list-style:none}.prose ul li,.prose ol li{margin-bottom:.7rem;padding-left:1.5rem;position:relative}.prose ul li:before{content:"";background:var(--accent);width:7px;height:7px;position:absolute;top:.68em;left:0}.prose ol{counter-reset:li}.prose ol li:before{content:counter(li);counter-increment:li;font-family:var(--mono);color:var(--accent);font-size:.72rem;line-height:1.9;position:absolute;top:0;left:0}.prose ul ul,.prose ol ol,.prose ul ol,.prose ol ul{margin:.7rem 0 0}.prose blockquote{border-left:2px solid var(--accent);color:var(--muted);margin:0 0 1.4rem;padding:.2rem 0 .2rem 1.4rem;font-style:italic}.prose hr{border:none;border-top:1px solid var(--rule);margin:2.4rem 0}.prose img{border:1px solid var(--rule);border-radius:8px;max-width:100%;margin:1.8rem 0;display:block}.prose figure{margin:1.8rem 0}.prose figcaption{color:var(--faint);text-align:center;margin-top:.6rem;font-size:.85rem}.prose :not(pre)>code{font-family:var(--mono);background:var(--panel);border:1px solid var(--rule);color:var(--ink);word-break:break-word;border-radius:5px;padding:.12em .4em;font-size:.82em}.prose pre{font-family:var(--mono);border:1px solid var(--rule);scrollbar-width:thin;border-radius:10px;margin:0 0 1.6rem;padding:1.1rem 1.3rem;font-size:.9rem;line-height:1.6;overflow-x:auto}.prose pre code{font-family:inherit;font-size:inherit;background:0 0;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{border-collapse:collapse;width:100%;margin:0 0 1.6rem;font-size:.95rem}.prose th,.prose td{text-align:left;border-bottom:1px solid var(--rule);padding:.6rem .8rem}.prose th{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-size:.7rem}.callout{white-space:pre-wrap;background:var(--panel);border:1px solid var(--rule);color:var(--ink);border-radius:8px;align-items:flex-start;gap:.6rem;margin:0 0 1.4rem;padding:1rem 1.1rem;font-size:1rem;line-height:1.55;display:flex}.callout code{font-family:var(--mono);background:var(--bg);border:1px solid var(--rule);border-radius:4px;padding:.1em .35em;font-size:.85em}.callout a{color:var(--accent);text-decoration:underline}.callout-icon{flex-shrink:0;max-width:1.2em;max-height:1.2em}@media (width<=820px){.shell{grid-template-columns:minmax(0,1fr)}.rail{border-right:none;border-bottom:1px solid var(--rule);flex-flow:wrap;align-items:center;gap:.8rem 1.2rem;min-height:auto;max-height:none;padding:1rem clamp(1.1rem,5vw,2.4rem);position:static;overflow:visible}.nav{-webkit-overflow-scrolling:touch;scrollbar-width:none;flex-flow:row;gap:.3rem;width:100%;margin-bottom:0;overflow-x:auto}.nav::-webkit-scrollbar{display:none}.nav a{white-space:nowrap;flex-shrink:0}.rail-ctx{border-top:none;width:100%;padding-top:1rem}.rail-ctx:not(:has(*)){display:none}.filters{flex-flow:wrap}.filters a{justify-content:flex-start;gap:.45rem}.rail-ctx:has(.toc),.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{-webkit-overflow-scrolling:touch;scrollbar-width:none;flex-wrap:nowrap;justify-content:center;gap:1.4rem;padding:.4rem clamp(1.1rem,5vw,4rem) 1.6rem;display:flex;overflow-x:auto}.soc-foot::-webkit-scrollbar{display:none}.soc-foot a{white-space:nowrap;min-height:44px;font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);flex-shrink:0;align-items:center;font-size:.66rem;transition:color .2s;display:inline-flex}.soc-foot a:hover{color:var(--accent)}}@media (width<=540px){.content{padding:1.6rem 1.1rem 1.4rem}.block{margin-bottom:2.4rem}.art .tags,.rail-ctx:has(.filters){display:none}body{font-size:1.06rem}.prose{padding-top:1.4rem;font-size:1.1rem}.prose h2{margin:2.2rem 0 .9rem;font-size:1.32rem}.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}}
