.shader-load-status[data-astro-cid-6e3icyu3]{position:fixed;right:20px;bottom:20px;z-index:20;display:flex;align-items:center;gap:10px;min-width:300px;max-width:calc(100vw - 40px);padding:8px 16px;border:1px solid #000;border-radius:5px;background:#464b50;color:#f0f0f0;box-shadow:0 5px 16px #0008;font:700 16px/1.4 Roboto,Segoe UI,Arial,sans-serif;pointer-events:none;overflow:hidden}.shader-load-status[data-astro-cid-6e3icyu3]:before{content:"";position:absolute;top:4px;left:4px;width:145px;height:145px;background:url(/img/ui/unreal-circle-thin.svg) center/contain no-repeat;opacity:.055}.shader-load-status[data-astro-cid-6e3icyu3][hidden]{display:none}.shader-load-status[data-astro-cid-6e3icyu3]{opacity:1;transition:opacity .25s ease-out}.shader-load-status[data-astro-cid-6e3icyu3].is-fading{opacity:0}.shader-spinner[data-astro-cid-6e3icyu3]{position:relative;width:40px;height:40px;flex:none;color:#fff;animation:shader-spin 1s linear infinite}.shader-message[data-astro-cid-6e3icyu3]{position:relative}@keyframes shader-spin{to{transform:rotate(360deg)}}@media(max-width:360px){.shader-load-status[data-astro-cid-6e3icyu3]{min-width:0;right:12px;bottom:12px;max-width:calc(100vw - 24px);font-size:14px}}@media(prefers-reduced-motion:reduce){.shader-spinner[data-astro-cid-6e3icyu3]{animation:none}}:root{--bg:#100e15;--bg2:#17131e;--panel:#1b1723;--panel-hover:#241d30;--border:#332b41;--border-soft:#292332;--surface:#30283e;--surface-hover:#3d3250;--surface-border:#4b3e5e;--divider-color:#5b4d6b;--divider-h:linear-gradient(90deg,transparent,var(--divider-color) 14%,var(--divider-color) 86%,transparent);--divider-v:linear-gradient(180deg,transparent,var(--divider-color) 12%,var(--divider-color) 88%,transparent);--text:#f0edf7;--muted:#b6aec3;--faint:#958ba4;--accent:#bb9af7;--accent-dim:#8060b2;--accent-hover:#cfb6ff;--accent-rgb:187,154,247;--accent-ink:#180f27;--portfolio:#b9adf6;--tutorials:#ffb15c;--blender:#ff8b6b;--unreal:var(--accent);--radius:14px;--pad:20%;--content-max:1350px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:radial-gradient(1100px 620px at 10% -6%,rgba(145,91,210,.24),transparent 60%),radial-gradient(960px 600px at 92% 6%,rgba(174,111,215,.14),transparent 55%),radial-gradient(1300px 900px at 50% 116%,rgba(123,77,177,.2),transparent 62%),var(--bg);background-attachment:fixed;color:var(--text);line-height:1.55;-webkit-font-smoothing:antialiased;min-height:100vh;overflow-x:clip}a{color:inherit;text-decoration:none}.layout{display:grid;grid-template-columns:288px 1fr;width:100%;min-height:100vh}.sidebar{position:sticky;top:0;align-self:start;height:100vh;padding:34px 26px;display:flex;flex-direction:column;gap:28px}.sidebar:after{content:"";position:absolute;top:0;right:0;width:1px;height:100%;background:var(--divider-v)}.brand{display:flex;align-items:center;gap:12px;padding:10px;border:1px solid var(--border);border-radius:12px;transition:background-color .15s,border-color .15s}.brand:hover{background:var(--panel-hover);border-color:var(--accent-dim)}.brand:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.avatar{width:46px;height:46px;border-radius:50%;background:linear-gradient(135deg,var(--accent-hover),#9568d9);display:grid;place-items:center;font-weight:700;color:var(--accent-ink);font-size:18px;flex:none}.brand h1{font-size:16px;font-weight:700;letter-spacing:.2px}.brand p{font-size:12px;color:var(--muted)}nav.menu{position:relative;display:flex;flex-direction:column;gap:2px;padding:18px 0}nav.menu:before,nav.menu:after{content:"";position:absolute;left:0;right:0;height:1px;background:var(--divider-h)}nav.menu:before{top:0}nav.menu:after{bottom:0}nav.menu a{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:10px;color:var(--muted);font-size:14px;font-weight:600;transition:.15s}nav.menu a .ic{width:16px;text-align:center;opacity:.85}nav.menu a:hover{background:var(--surface-hover);color:var(--text)}nav.menu a.active{background:var(--surface);color:var(--text);box-shadow:inset 2px 0 0 var(--accent)}nav.menu a.active .ic{color:var(--accent);opacity:1}.side-foot{margin-top:auto;display:flex;flex-direction:column;gap:14px}.socials{display:flex;gap:10px}.socials a{width:36px;height:36px;border:1px solid var(--surface-border);background:var(--surface);border-radius:9px;display:grid;place-items:center;color:var(--accent);font-size:13.5px;font-weight:700;transition:.15s}.socials a:hover{border-color:var(--accent);background:var(--accent);color:var(--accent-ink)}.side-note{font-size:11px;color:var(--faint)}main{min-width:0;padding-top:clamp(34px,3.4vw,60px);padding-bottom:72px;padding-inline:max(24px,var(--pad),calc((100% - var(--content-max)) / 2))}.hero{padding:20px 0 38px}.sec-divider{border:none;height:1px;background:var(--divider-h);margin:0}.grid+.sec-divider{margin-top:34px}.eyebrow{font-size:12px;letter-spacing:2.5px;text-transform:uppercase;color:var(--accent);font-weight:600}.hero h2{font-size:clamp(34px,3vw,46px);line-height:1.12;margin:14px 0 16px;font-weight:800;letter-spacing:-.5px;max-width:780px}.hero h2 .hl{color:var(--accent)}.hero p{color:var(--muted);max-width:720px;font-size:16px}.hero .cta{margin-top:22px;display:flex;gap:12px}.btn{padding:10px 18px;border-radius:10px;font-size:13.5px;font-weight:600;transition:.15s;border:1px solid transparent}.btn.primary{background:var(--accent);color:var(--accent-ink)}.btn.primary:hover{background:var(--accent-hover)}.btn.ghost{background:var(--surface);border-color:var(--surface-border);color:var(--text)}.btn.ghost:hover{background:var(--surface-hover);border-color:var(--accent);color:var(--accent)}.sec-head{display:flex;align-items:center;justify-content:space-between;margin:34px 0 18px;flex-wrap:wrap;gap:14px}.sec-head h3{font-size:19px;font-weight:700}.more-links{display:flex;gap:18px;flex-wrap:wrap}.more-links a{font-size:13px;font-weight:600;color:var(--accent)}.more-links a:hover{text-decoration:underline;text-underline-offset:3px}.filters{display:flex;gap:8px;flex-wrap:wrap}.chip{padding:7px 13px;border-radius:999px;border:1px solid var(--surface-border);background:var(--surface);color:var(--muted);font-size:12.5px;font-weight:600;cursor:pointer;transition:.15s;font-family:inherit}.chip:hover{border-color:var(--accent);color:var(--text);background:var(--surface-hover)}.chip.active{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,430px));justify-content:center;gap:clamp(20px,1.4vw,28px)}.card{background:var(--panel);border:1px solid var(--border-soft);border-radius:var(--radius);overflow:hidden;display:flex;flex-direction:column;transition:.18s;cursor:pointer}.card:hover{transform:translateY(-4px);border-color:var(--accent-dim);box-shadow:0 14px 40px -18px #000c}.thumb{position:relative;aspect-ratio:16/9;background:#0e1218;overflow:hidden}.thumb img{width:100%;height:100%;object-fit:cover}.thumb .ph{position:absolute;inset:0;display:grid;place-items:center;font-size:12px;color:var(--faint);letter-spacing:.5px;text-align:center;padding:0 12px}.thumb .gifhint{position:absolute;left:10px;bottom:10px;font-size:10.5px;font-weight:700;letter-spacing:.5px;color:var(--accent-hover);background:#100e15b3;border:1px solid rgba(var(--accent-rgb),.3);padding:3px 8px;border-radius:7px;opacity:0;transform:translateY(4px);transition:.2s}.card:hover .gifhint{opacity:1;transform:translateY(0)}.thumb video.card-preview{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.thumb .play-badge{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:54px;height:54px;border-radius:50%;background:#080e148c;border:1px solid rgba(255,255,255,.35);display:grid;place-items:center;z-index:2;pointer-events:none;transition:opacity .2s,transform .2s;backdrop-filter:blur(2px)}.thumb .play-badge:before{content:"";border-style:solid;border-width:9px 0 9px 15px;border-color:transparent transparent transparent #fff;margin-left:4px}.card:hover .thumb .play-badge{opacity:0;transform:translate(-50%,-50%) scale(.85)}.g1{background:linear-gradient(135deg,#39274e,#191123)}.g2{background:linear-gradient(135deg,#3a2a4d,#181226)}.g3{background:linear-gradient(135deg,#143b3a,#0c1f22)}.g4{background:linear-gradient(135deg,#3d2417,#1e120b)}.g5{background:linear-gradient(135deg,#322448,#171020)}.g6{background:linear-gradient(135deg,#2c2150,#14102a)}.body{padding:16px 18px 18px;display:flex;flex-direction:column;flex:1;gap:9px}.meta{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.badge{font-size:10.5px;font-weight:700;letter-spacing:.4px;padding:3px 8px;border-radius:6px;border:1px solid var(--border);color:var(--muted);background:var(--bg2)}.badge.ue{color:var(--accent-hover);border-color:rgba(var(--accent-rgb),.35)}.badge.dl{color:#a9e6b4;border-color:#78dc964d}.type-badge{font-size:10.5px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;padding:3px 8px;border-radius:999px;border:1px solid transparent;white-space:nowrap}.type-badge.type-article{color:#b9adf6;background:#a692eb26;border-color:#a692eb66}.type-badge.type-tutorial{color:#7fe0c3;background:#5ad2aa26;border-color:#5ad2aa66}.type-badge.type-showcase{color:#e4a3dd;background:#d185c726;border-color:#d185c766}.origin-badge{font-size:10.5px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;padding:3px 9px;border-radius:999px;border:1px solid var(--border);color:var(--faint);background:transparent;white-space:nowrap}.origin-badge.origin-epic{color:#e6c79c;border-color:#e7b36e59}.meta .origin-badge,.submeta .origin-badge{margin-left:auto}.card h4{font-size:19px;font-weight:500;line-height:1.22;letter-spacing:-.2px;color:var(--text)}.card .ex{font-size:13px;color:var(--muted);flex:1}.card .foot{display:flex;align-items:center;justify-content:space-between;margin-top:6px;padding-top:11px;border-top:1px solid var(--border-soft)}.more{font-size:12.5px;font-weight:700;color:var(--accent);display:flex;align-items:center;gap:5px}.date{font-size:11.5px;color:var(--faint)}.foot-right{display:flex;align-items:center;gap:12px}.hl-mark{font-size:11.5px;font-weight:700;letter-spacing:.3px;color:#ffd479;white-space:nowrap}footer{padding:26px 0;border-top:1px solid var(--border-soft);color:var(--faint);font-size:12px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}.article{max-width:100%;margin:0;padding:clamp(24px,3vw,52px);background:#1b1723b8;border:1px solid var(--border-soft);border-radius:18px;box-shadow:0 24px 70px -42px #000000d9}.article .back{font-size:13px;color:var(--accent);font-weight:600;display:inline-block;margin-bottom:24px}.article-head{margin:6px 0 22px}.article-head.has-hero{margin:4px 0 30px;padding:46px 30px 34px;border-radius:14px;background-image:linear-gradient(180deg,#100e1566,#17131ed1 72%,#1b1723eb),var(--hero);background-size:cover;background-position:center}.article h1{font-size:clamp(28px,3vw,40px);line-height:1.15;font-weight:800;letter-spacing:-.5px;margin:10px 0 14px}.article .submeta{display:flex;gap:10px;align-items:center;flex-wrap:wrap;color:var(--faint);font-size:13px;margin-bottom:8px}.prose{font-size:16px;line-height:1.7;color:#d6cede}.prose h2{font-size:24px;font-weight:700;margin:34px 0 12px;color:var(--text)}.prose h3{font-size:19px;font-weight:700;margin:26px 0 10px;color:var(--text)}.prose p{margin:14px 0}.prose p,.prose ul,.prose ol,.prose h2,.prose h3,.prose hr,.prose blockquote{max-width:100%}.prose ul,.prose ol{margin:14px 0;padding-left:22px}.prose li{margin:6px 0}.prose a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.prose hr{border:none;height:1px;margin:36px 0;background:var(--divider-h)}.prose img{max-width:100%;height:auto;border-radius:10px}.prose figure.post-figure{margin:28px auto;text-align:center}.prose figure.post-figure img{display:inline-block;max-width:100%;max-height:62vh;width:auto;border:1px solid var(--border-soft);border-radius:10px;background:#0a0d12}.prose figcaption{margin-top:9px;font-size:13px;color:var(--faint);font-style:italic}.prose figure.post-figure video{display:inline-block;width:auto;max-width:100%;max-height:62vh;height:auto;border:1px solid var(--border-soft);border-radius:10px;background:#0a0d12}.prose .img-row figure video{width:100%;max-height:none;border:1px solid var(--border-soft);border-radius:10px;background:#0a0d12}.prose figure.post-figure.is-lead{margin:2px auto 30px}.prose figure.post-figure.is-lead img,.prose figure.post-figure.is-lead video{max-width:62%;max-height:46vh}.prose video.hover-play{cursor:pointer}.prose a.pswp-link{display:block;cursor:zoom-in}.prose img-comparison-slider{width:100%;border:1px solid var(--border-soft);border-radius:10px;overflow:hidden;--divider-color:var(--accent);--default-handle-opacity:.85;--divider-width:2px}.prose img-comparison-slider img,.prose img-comparison-slider [slot]{display:block;width:100%}.prose swiper-container{--swiper-theme-color:var(--accent);display:block;border:1px solid var(--border-soft);border-radius:10px;overflow:hidden;margin:28px 0;background:#0a0d12;padding-bottom:8px}.prose swiper-slide{height:auto;text-align:center}.prose swiper-slide img,.prose swiper-slide video{width:100%;max-height:60vh;object-fit:contain;display:block;margin:0 auto}.prose swiper-slide .cap{display:block;padding:8px 44px 16px;font-size:13px;color:var(--faint);font-style:italic}.prose .img-row{display:flex;gap:18px;flex-wrap:wrap;align-items:center;justify-content:center;margin:28px 0}.prose .img-row figure{flex:1 1 300px;margin:0;text-align:center}.prose .img-row figure img{width:100%;max-height:none;border:1px solid var(--border-soft);border-radius:10px;background:#0a0d12}.gallery-wrap{position:relative;margin:28px 0}.prose .gallery{display:flex;gap:14px;overflow-x:auto;scroll-snap-type:x mandatory;padding:4px 2px 12px;margin:0;scrollbar-width:thin;scrollbar-color:var(--border-soft) transparent}.prose .gallery::-webkit-scrollbar{height:8px}.prose .gallery::-webkit-scrollbar-thumb{background:var(--border-soft);border-radius:8px}.prose .gallery>figure{flex:0 0 min(82%,560px);scroll-snap-align:center;margin:0;text-align:center}.prose .gallery>figure img{width:100%;max-height:58vh;object-fit:contain;border:1px solid var(--border-soft);border-radius:10px;background:#0a0d12}.gallery-wrap .gnav{position:absolute;top:calc(50% - 24px);transform:translateY(-50%);z-index:2;width:40px;height:40px;border-radius:50%;border:1px solid var(--border);background:#0c0e12d1;color:var(--text);font-size:20px;line-height:1;cursor:pointer;display:grid;place-items:center;transition:.15s}.gallery-wrap .gnav:hover{border-color:var(--accent-dim);color:var(--accent)}.gallery-wrap .gnav.prev{left:8px}.gallery-wrap .gnav.next{right:8px}.gallery-dots{display:flex;gap:7px;justify-content:center;margin-top:4px}.gallery-dots button{width:8px;height:8px;padding:0;border-radius:50%;border:none;background:var(--border);cursor:pointer;transition:.15s}.gallery-dots button.active{background:var(--accent)}.prose em{color:var(--muted)}.prose code{background:var(--bg2);border:1px solid var(--border-soft);border-radius:5px;padding:1px 6px;font-size:13.5px;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.prose pre{background:#0a0d12!important;border:1px solid var(--border-soft);border-radius:10px;padding:16px 18px;overflow-x:auto;max-width:100%;margin:18px 0;font-size:13.5px;line-height:1.5}.prose pre code{background:none;border:none;padding:0}.media-note{display:block;border:1px dashed var(--border);border-radius:10px;padding:14px 16px;color:var(--faint);font-size:13px;margin:18px 0;background:var(--bg2)}.prose details.tech-section{border:1px solid var(--border-soft);border-radius:12px;background:#ffffff05;margin:26px 0;padding:0}.prose details.tech-section>summary{cursor:pointer;list-style:none;padding:14px 18px;font-weight:600;color:var(--accent);display:flex;align-items:center;gap:9px;user-select:none}.prose details.tech-section>summary::-webkit-details-marker{display:none}.prose details.tech-section>summary:before{content:"▸";color:var(--accent);transition:transform .15s}.prose details.tech-section[open]>summary:before{transform:rotate(90deg)}.prose details.tech-section>summary:hover{color:var(--text)}.prose details.tech-section[open]>summary{border-bottom:1px solid var(--border-soft)}.prose details.tech-section>*:not(summary){margin-left:18px;margin-right:18px}.prose details.tech-section>*:last-child{margin-bottom:16px}.prose h2,.prose h3{scroll-margin-top:90px}.prose h2.heading-flash,.prose h3.heading-flash{animation:headingFlash 1.2s ease-out;border-radius:6px}@keyframes headingFlash{0%{color:var(--accent);background:rgba(var(--accent-rgb),.16);box-shadow:0 0 0 7px rgba(var(--accent-rgb),.16)}70%{color:var(--accent)}to{color:inherit;background:transparent;box-shadow:0 0 0 7px transparent}}.post-toc{display:none}@media(min-width:1400px){.post-toc{display:block;position:fixed;top:104px;left:calc(84px + max(24px,(100vw - 288px) * .2,(100vw - 288px - var(--content-max)) / 2));width:180px;max-height:calc(100vh - 150px);overflow-y:auto;font-size:13px;padding-left:16px;border-left:1px solid var(--divider-color)}.post-toc .toc-title{text-transform:uppercase;letter-spacing:1.4px;font-size:11px;color:var(--faint);font-weight:700;margin-bottom:10px}.post-toc ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.post-toc li.toc-d3{padding-left:14px}.post-toc a{display:block;color:var(--muted);line-height:1.35;border-left:2px solid transparent;margin-left:-14px;padding:4px 0 4px 12px;transition:.15s}.post-toc a:hover{color:var(--text)}.post-toc a.active{color:var(--accent);border-left-color:var(--accent);font-weight:600}}@media(max-width:900px){.layout{grid-template-columns:1fr}.sidebar{position:static;height:auto;flex-direction:row;align-items:center;flex-wrap:wrap;border-right:none;border-bottom:1px solid var(--border-soft)}nav.menu{flex-direction:row;flex-wrap:wrap;padding:0}.side-foot{margin:0}.sidebar:after,nav.menu:before,nav.menu:after{display:none}main{padding:26px 22px}.prose figure.post-figure.is-lead img,.prose figure.post-figure.is-lead video{max-width:100%}}@media(max-width:620px){.hero h2{font-size:26px}}
