/* FENG // LAB first-wave interaction demo */
:root{--feng-ease:cubic-bezier(.22,1,.36,1);--feng-accent:#7ca7ff;--feng-panel:rgba(12,18,29,.92);--feng-line:rgba(151,168,201,.18)}
html{view-transition-name:none}#main{view-transition-name:feng-main}
::view-transition-old(feng-main){animation:feng-page-out .2s ease both}::view-transition-new(feng-main){animation:feng-page-in .42s var(--feng-ease) both}
@keyframes feng-page-out{to{opacity:0;transform:translateY(-5px) scale(.995);filter:blur(3px)}}@keyframes feng-page-in{from{opacity:0;transform:translateY(14px) scale(.992);filter:blur(5px)}}
.feng-navigating{cursor:progress}.feng-navigating body::after{content:"";position:fixed;z-index:2147483000;left:0;top:0;width:38%;height:2px;background:linear-gradient(90deg,#67d9a4,#7ca7ff,#ad8cff);animation:feng-loading .9s ease-in-out infinite;border-radius:0 2px 2px 0}@keyframes feng-loading{50%{width:76%}100%{left:100%;width:12%}}
.feng-smart-nav{position:sticky!important;top:0;z-index:80;transition:transform .32s var(--feng-ease),opacity .25s ease!important;will-change:transform}.feng-smart-nav.is-hidden{transform:translateY(calc(-100% - 16px));opacity:0;pointer-events:none}
#feng-reader-dock{position:fixed;z-index:900;right:max(16px,calc((100vw - 1500px)/2));bottom:24px;display:flex;flex-direction:column-reverse;align-items:center;gap:9px;opacity:0;transform:translateY(12px);pointer-events:none;transition:.25s var(--feng-ease)}#feng-reader-dock.is-visible{opacity:1;transform:none;pointer-events:auto}
#feng-reader-dock button{display:grid;place-items:center;width:42px;height:42px;padding:0;color:#cbd7ea!important;border:1px solid var(--feng-line)!important;border-radius:13px!important;background:var(--feng-panel)!important;backdrop-filter:blur(16px);box-shadow:0 10px 28px rgba(0,0,0,.2);cursor:pointer;transition:.2s ease}#feng-reader-dock button:hover,#feng-reader-dock button.active{color:#fff!important;border-color:rgba(124,167,255,.55)!important;transform:translateY(-2px)}
.feng-dock-main{position:relative!important;width:50px!important;height:50px!important;border-radius:50%!important}.feng-dock-main svg{position:absolute;inset:4px;width:42px;height:42px;transform:rotate(-90deg);fill:none;stroke:rgba(151,168,201,.16);stroke-width:2}.feng-dock-main svg .meter{stroke:var(--feng-accent);stroke-linecap:round;stroke-dasharray:113.1;stroke-dashoffset:113.1;transition:stroke-dashoffset .1s linear}.feng-dock-main b{font:750 10px/1 ui-monospace,monospace}.feng-dock-main b::after{content:"%";font-size:7px;color:#7f8ca1}.is-end .feng-dock-main b{font-size:0}.is-end .feng-dock-main b::before{content:"↑";font-size:18px}.is-end .feng-dock-main b::after{display:none}.feng-dock-tools{display:flex;flex-direction:column;gap:7px;max-height:0;opacity:0;overflow:hidden;transform:translateY(8px);transition:.25s var(--feng-ease)}#feng-reader-dock:hover .feng-dock-tools,#feng-reader-dock:focus-within .feng-dock-tools{max-height:170px;opacity:1;transform:none}
#feng-mobile-toc{position:fixed;z-index:2147482000;inset:0;visibility:hidden;pointer-events:none}#feng-mobile-toc.open{visibility:visible;pointer-events:auto}.feng-toc-mask{position:absolute;inset:0;width:100%;height:100%;border:0!important;background:rgba(1,5,12,.64)!important;opacity:0;transition:.25s}.open>.feng-toc-mask{opacity:1}#feng-mobile-toc>section{position:absolute;right:12px;bottom:12px;width:min(390px,calc(100% - 24px));max-height:min(72vh,620px);display:flex;flex-direction:column;color:#dce6f4;border:1px solid var(--feng-line);border-radius:20px;background:rgba(10,16,27,.97);box-shadow:0 24px 80px rgba(0,0,0,.42);transform:translateY(24px) scale(.96);transform-origin:right bottom;opacity:0;transition:.3s var(--feng-ease);overflow:hidden}.open>section{transform:none;opacity:1}#feng-mobile-toc header{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--feng-line)}#feng-mobile-toc header button{color:#aebbd0!important;border:0!important;background:none!important;font-size:24px}#feng-mobile-toc nav{padding:12px 16px 18px;overflow:auto}#feng-mobile-toc .toc{display:block!important}#feng-mobile-toc a{display:block;padding:7px 9px;color:#aebbd0!important;border-radius:8px}#feng-mobile-toc a:hover,#feng-mobile-toc a.feng-active{color:#fff!important;background:rgba(124,167,255,.12)}
#data-toc a.toc-link{position:relative;transition:color .2s,background .2s,transform .2s}#data-toc a.toc-link.feng-active{color:#9fc0ff!important;background:rgba(124,167,255,.09)!important;transform:translateX(3px)}#data-toc a.toc-link.feng-active::before{content:"";position:absolute;left:0;top:25%;width:2px;height:50%;border-radius:2px;background:var(--feng-accent);box-shadow:0 0 9px var(--feng-accent)}
figure.highlight.feng-code-collapsed,pre.feng-code-collapsed{position:relative;max-height:420px!important;overflow:hidden!important}figure.highlight.feng-code-collapsed::after,pre.feng-code-collapsed::after{content:"";position:absolute;z-index:2;left:0;right:0;bottom:0;height:90px;pointer-events:none;background:linear-gradient(transparent,#080f1b)}figure.highlight.feng-code-collapsed.is-open,pre.feng-code-collapsed.is-open{height:auto!important;max-height:none!important;overflow:visible!important}figure.highlight.feng-code-collapsed.is-open::after,pre.feng-code-collapsed.is-open::after{display:none}.feng-code-toggle{position:absolute!important;z-index:3;left:50%;bottom:12px;width:auto!important;min-width:100px;height:32px!important;padding:0 14px!important;transform:translateX(-50%);color:#dce8f8!important;border:1px solid rgba(124,167,255,.35)!important;border-radius:99px!important;background:rgba(12,23,38,.94)!important;font-size:12px!important}.is-open>.feng-code-toggle{position:sticky!important;left:50%;bottom:10px}
.feng-related{margin:2.5rem 0 1rem;padding-top:1.6rem;border-top:1px solid var(--feng-line)}.feng-related header small{color:#7ca7ff;font:700 .62rem/1 ui-monospace,monospace;letter-spacing:.15em}.feng-related header h2{margin:.45rem 0 1rem;color:#fff}.feng-related>div{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.7rem}.feng-related a{min-height:120px;display:flex;flex-direction:column;padding:1rem;color:#dce6f4!important;border:1px solid var(--feng-line);border-radius:14px;background:rgba(16,25,40,.72);transition:.2s}.feng-related a:hover{border-color:rgba(124,167,255,.42);transform:translateY(-3px)}.feng-related a span{color:#6f8098;font:650 .55rem/1 ui-monospace,monospace;letter-spacing:.12em}.feng-related a b{margin:.65rem 0;line-height:1.5}.feng-related a i{margin-top:auto;color:#7ca7ff;font-style:normal}
body.feng-focus-mode .l_left,body.feng-focus-mode .l_right,body.feng-focus-mode .site-footer{display:none!important}body.feng-focus-mode .l_body{grid-template-columns:minmax(0,1fr)!important}body.feng-focus-mode .l_main{width:min(920px,calc(100% - 32px));margin:auto}
@media(max-width:760px){#feng-reader-dock{right:12px;bottom:14px}.feng-related>div{grid-template-columns:1fr}.feng-smart-nav{position:relative!important}.feng-smart-nav.is-hidden{transform:none;opacity:1}}
@media(prefers-reduced-motion:reduce){::view-transition-old(feng-main),::view-transition-new(feng-main){animation:none}.feng-smart-nav,#feng-reader-dock,#feng-mobile-toc>*{transition:none!important}}

.feng-zoomable{cursor:zoom-in}#feng-lightbox{width:100vw;max-width:none;height:100vh;max-height:none;margin:0;padding:40px;color:#dce6f4;border:0;background:rgba(2,6,13,.88);backdrop-filter:blur(18px)}#feng-lightbox[open]{display:grid;place-items:center}#feng-lightbox::backdrop{background:transparent}#feng-lightbox img{max-width:min(1200px,94vw);max-height:82vh;object-fit:contain;border-radius:12px;box-shadow:0 28px 90px rgba(0,0,0,.55)}#feng-lightbox button{position:fixed;right:22px;top:18px;width:44px;height:44px;color:#fff!important;border:1px solid var(--feng-line)!important;border-radius:50%!important;background:rgba(12,18,29,.8)!important;font-size:26px}#feng-lightbox p{margin:10px;color:#aebbd0}.feng-code-lang{position:absolute;z-index:3;right:12px;top:6px;color:#7590ab;font:700 9px/1 ui-monospace,monospace;letter-spacing:.1em}

/* A real light palette. tech.css intentionally mapped both modes to dark, so this later layer restores mode separation. */
:root[data-theme="light"]{color-scheme:light!important;--background:#f4f7fb!important;--card:#fff!important;--block:#edf2f8!important;--block-border:#d6e0ec!important;--theme-block:#edf2f8!important;--theme-border:#d6e0ec!important;--text:#172033!important;--text-p0:#111827!important;--text-p1:#27344a!important;--text-p2:#4c5d74!important;--text-p3:#68778d!important;--text-p4:#8491a3!important;--feng-panel:rgba(255,255,255,.92);--feng-line:rgba(48,68,98,.16)}
:root[data-theme="light"] body{color:#27344a!important;background:radial-gradient(circle at 15% 0,rgba(92,139,224,.09),transparent 32rem),#f4f7fb!important}:root[data-theme="light"] body::before{opacity:.16!important}:root[data-theme="light"] .l_left .sidebg{background:rgba(244,247,251,.94)!important}:root[data-theme="light"] .leftbar-container,:root[data-theme="light"] .post-list .post-card,:root[data-theme="light"] .l_main article.md-text,:root[data-theme="light"] .l_main>.post-list,:root[data-theme="light"] .widget-wrapper{color:#27344a!important;background:#fff!important;border-color:#d6e0ec!important}:root[data-theme="light"] .md-text,:root[data-theme="light"] .md-text p,:root[data-theme="light"] .md-text li,:root[data-theme="light"] .md-text td,:root[data-theme="light"] .md-text th{color:#27344a!important}:root[data-theme="light"] .md-text h1,:root[data-theme="light"] .md-text h2,:root[data-theme="light"] .md-text h3,:root[data-theme="light"] .post-list .post-title,:root[data-theme="light"] .logo-wrap .title,:root[data-theme="light"] .logo-wrap .title a{color:#111827!important}:root[data-theme="light"] .nav-area .menu .nav-item{color:#34445c!important;background:#eef3f9!important;border-color:#d6e0ec!important}:root[data-theme="light"] #feng-mobile-toc>section{color:#27344a;background:rgba(255,255,255,.98)}:root[data-theme="light"] .feng-related a{color:#27344a!important;background:#fff}:root[data-theme="light"] .feng-related header h2{color:#111827!important}:root[data-theme="light"] #feng-reader-dock button{color:#43536b!important}

/* Keep anchored headings clear of the sticky navigation. */
article.md-text :is(h1,h2,h3,h4,h5,h6)[id],.md-text.content :is(h1,h2,h3,h4,h5,h6)[id]{scroll-margin-top:88px}
