:root{--macos-bg: #f5f5f7;--macos-bg-secondary: #ffffff;--macos-text: #1d1d1f;--macos-text-secondary: #86868b;--macos-text-tertiary: #6e6e73;--macos-accent: #0071e3;--macos-accent-hover: #0077ed;--macos-accent-light: rgba(0, 113, 227, .1);--sonoma-pink: #ff6b9d;--sonoma-purple: #c084fc;--sonoma-blue: #60a5fa;--sonoma-cyan: #22d3ee;--sonoma-orange: #fb923c;--window-bg: rgba(255, 255, 255, .78);--window-bg-solid: #ffffff;--window-border: rgba(0, 0, 0, .06);--window-border-light: rgba(255, 255, 255, .5);--window-shadow: 0 0 0 .5px rgba(0, 0, 0, .05), 0 2px 4px rgba(0, 0, 0, .02), 0 12px 28px rgba(0, 0, 0, .08), 0 24px 50px rgba(0, 0, 0, .06);--window-shadow-hover: 0 0 0 .5px rgba(0, 0, 0, .06), 0 4px 8px rgba(0, 0, 0, .03), 0 16px 36px rgba(0, 0, 0, .1), 0 32px 64px rgba(0, 0, 0, .08);--traffic-close: #ff5f57;--traffic-close-hover: #ff3b30;--traffic-minimize: #febc2e;--traffic-minimize-hover: #ffcc00;--traffic-maximize: #28c840;--traffic-maximize-hover: #34c759;--traffic-inactive: #ddd;--glass-bg: rgba(255, 255, 255, .72);--glass-bg-dark: rgba(30, 30, 30, .78);--glass-blur: 24px;--glass-blur-heavy: 40px;--glass-saturate: 180%;--vibrancy-light: rgba(255, 255, 255, .6);--vibrancy-ultra-light: rgba(255, 255, 255, .4);--vibrancy-material: rgba(245, 245, 247, .8);--radius-xs: 4px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 20px;--radius-2xl: 28px;--dock-bg: rgba(255, 255, 255, .25);--dock-blur: 30px;--sidebar-width: 240px;--sidebar-bg: rgba(245, 245, 247, .8);--toolbar-bg: rgba(246, 246, 248, .85);--toolbar-border: rgba(0, 0, 0, .06);--spring-bounce: cubic-bezier(.34, 1.56, .64, 1);--spring-smooth: cubic-bezier(.25, .1, .25, 1);--spring-snappy: cubic-bezier(.2, 0, 0, 1);--ease-out-expo: cubic-bezier(.16, 1, .3, 1)}@font-face{font-family:Inter;src:url(/fonts/Inter-VariableFont_slnt,wght.ttf) format("truetype-variations");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:SF Pro Display;src:local("SF Pro Display"),local(".SF NS Display"),local("Helvetica Neue");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:SF Pro Text;src:local("SF Pro Text"),local(".SF NS Text"),local("Helvetica Neue");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:SF Pro Rounded;src:local("SF Pro Rounded"),local(".SF NS Rounded"),local("SF Pro Display");font-weight:100 900;font-style:normal;font-display:swap}*{box-sizing:border-box}html{scroll-behavior:smooth;scrollbar-gutter:stable}body{font-family:Inter,SF Pro Text,-apple-system,PingFang SC,Hiragino Sans GB,Microsoft YaHei,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;margin:0;padding:0;background:var(--macos-bg);color:var(--macos-text);font-size:17px;line-height:1.47059;letter-spacing:-.022em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh;overflow-x:hidden;cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M3.2 1.5 3.7 19l4.2-4 2.8 6.7c.25.6.95.89 1.55.64l1.5-.62c.61-.25.9-.95.64-1.56L11.6 13l6.3-.1c1.06-.02 1.58-1.31.84-2.05L5.2 0.98A1.25 1.25 0 0 0 3.2 1.5z' fill='%23101010'/%3E%3Cpath d='M4.45 2.95 4.83 16.2l2.81-2.69a.9.9 0 0 1 1.48.35l3.17 7.57 1.35-.56-3.17-7.57a.9.9 0 0 1 .8-1.25l5.64-.09L4.45 2.95z' fill='%23ffffff' fill-opacity='.18'/%3E%3C/svg%3E") 3 1,default}body:before,body:after{content:"";position:fixed;inset:0;pointer-events:none;z-index:0}body:before{background:radial-gradient(circle at 18% 22%,rgba(255,255,255,.42) 0%,transparent 36%),radial-gradient(circle at 84% 78%,rgba(255,255,255,.22) 0%,transparent 42%);filter:blur(40px);opacity:.45;animation:bodyAmbientFloat 18s ease-in-out infinite alternate}body:after{background-image:radial-gradient(rgba(255,255,255,.42) .8px,transparent 1px);background-size:26px 26px;opacity:.065;mix-blend-mode:soft-light;animation:bodySparklePulse 7s ease-in-out infinite}body>*{position:relative;z-index:1}a,button,[role=button],input,textarea,select,summary,label{cursor:pointer}.article-image-zoomable{cursor:zoom-in}.js body.is-ready main,.js body.is-ready header,.js body.is-ready footer{opacity:1;transform:none;filter:none;pointer-events:auto;transition:opacity .65s var(--ease-out-expo),transform .65s var(--ease-out-expo),filter .65s var(--ease-out-expo)}.stage-intro{opacity:1;transform:none;filter:none}.js .stage-intro{opacity:0;transform:translateY(18px) scale(.985);filter:blur(6px);will-change:transform,opacity,filter}.js body.is-ready .stage-intro{animation:stageReveal .5s var(--ease-out-expo) both}.js body.is-ready .stage-intro.stage-1{animation-delay:.05s}.js body.is-ready .stage-intro.stage-2{animation-delay:.1s}.js body.is-ready .stage-intro.stage-3{animation-delay:.15s}.js body.is-ready .stage-intro.stage-4{animation-delay:.2s}.js body.is-ready .stage-intro.stage-5{animation-delay:.25s}.js body.is-ready .stage-intro.stage-6{animation-delay:.3s}.js body.is-ready .stage-intro.stage-7{animation-delay:.35s}.js body.is-ready .stage-intro.stage-8{animation-delay:.4s}@keyframes stageReveal{0%{opacity:0;transform:translateY(18px) scale(.985);filter:blur(6px)}to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}@keyframes bodyAmbientFloat{0%{transform:translate3d(-1.5%,0,0) scale(1)}to{transform:translate3d(1.5%,-1.5%,0) scale(1.04)}}@keyframes bodySparklePulse{0%,to{opacity:.08}50%{opacity:.18}}@keyframes orbBreathing{0%,to{filter:blur(12px);opacity:.55}50%{filter:blur(18px);opacity:.8}}.app-fx-layer{position:fixed;inset:0;pointer-events:none;z-index:2500;display:none}.js .app-fx-layer{display:block}main{width:100%;max-width:1040px;margin:0 auto;padding:2rem 1.5rem 4rem}h1,h2,h3,h4,h5,h6{font-family:Inter,SF Pro Display,-apple-system,PingFang SC,Hiragino Sans GB,Microsoft YaHei,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--macos-text);line-height:1.08;margin:0 0 .5rem;font-weight:600;letter-spacing:-.025em}h1{font-size:2.8rem;font-weight:700;letter-spacing:-.03em}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.25rem}h5{font-size:1.1rem}p{margin:0 0 1em;color:var(--macos-text-secondary)}.prose p{margin-bottom:1.5em;color:var(--macos-text);font-size:1.05rem;line-height:1.7}a{color:var(--macos-accent);text-decoration:none;transition:color .2s var(--spring-smooth)}a:hover{color:var(--macos-accent-hover);text-decoration:underline}strong,b{font-weight:600}.macos-window{position:relative;background:var(--window-bg);backdrop-filter:saturate(var(--glass-saturate)) blur(var(--glass-blur));-webkit-backdrop-filter:saturate(var(--glass-saturate)) blur(var(--glass-blur));border-radius:var(--radius-lg);box-shadow:var(--window-shadow);border:.5px solid var(--window-border);overflow:hidden;transition:transform .4s var(--spring-smooth),box-shadow .4s var(--spring-smooth)}.macos-window:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.8) 20%,rgba(255,255,255,.8) 80%,transparent 100%);z-index:1;pointer-events:none}.macos-window:hover{transform:translateY(-2px) scale(1.002);box-shadow:var(--window-shadow-hover)}.macos-window:active{transform:translateY(-1px) scale(1.001)}.window-titlebar{position:relative;display:flex;align-items:center;padding:11px 16px;background:linear-gradient(180deg,#fffffff7,#f8f8faf2);border-bottom:.5px solid rgba(0,0,0,.06);gap:8px;min-height:40px}.window-titlebar:before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,255,255,.4) 0%,transparent 50%);pointer-events:none}.traffic-lights{display:flex;gap:8px;flex-shrink:0;position:relative;z-index:2}.traffic-light{width:12px;height:12px;border-radius:50%;position:relative;cursor:default;transition:all .15s var(--spring-smooth)}.traffic-light:before{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);opacity:0;transition:opacity .15s ease}.traffic-lights:hover .traffic-light:before{opacity:1}.traffic-light.close{background:linear-gradient(180deg,#ff6058,#ff5047);box-shadow:inset 0 0 0 .5px #0000001f,inset 0 -1px 1px #0000000d,inset 0 1px 1px #ffffff4d}.traffic-light.close:before{width:6px;height:1px;background:#4d0605cc;transform:translate(-50%,-50%) rotate(45deg);box-shadow:0 0 0 .5px #4d0605cc}.traffic-light.close:after{content:"";position:absolute;top:50%;left:50%;width:6px;height:1px;background:#4d0605cc;transform:translate(-50%,-50%) rotate(-45deg);opacity:0;transition:opacity .15s ease}.traffic-lights:hover .traffic-light.close:after{opacity:1}.traffic-light.minimize{background:linear-gradient(180deg,#ffbe2f,#ffb71b);box-shadow:inset 0 0 0 .5px #0000001a,inset 0 -1px 1px #0000000d,inset 0 1px 1px #ffffff4d}.traffic-light.minimize:before{width:6px;height:1px;background:#995904cc}.traffic-light.maximize{background:linear-gradient(180deg,#2ace42,#24c138);box-shadow:inset 0 0 0 .5px #0000001a,inset 0 -1px 1px #0000000d,inset 0 1px 1px #ffffff4d}.traffic-light.maximize:before{width:0;height:0;border-left:2.5px solid transparent;border-right:2.5px solid transparent;border-bottom:4px solid rgba(11,79,21,.8);background:none;transform:translate(-50%,-70%)}.traffic-light.maximize:after{content:"";position:absolute;top:65%;left:50%;width:0;height:0;border-left:2.5px solid transparent;border-right:2.5px solid transparent;border-top:4px solid rgba(11,79,21,.8);transform:translate(-50%,-50%);opacity:0;transition:opacity .15s ease}.traffic-lights:hover .traffic-light.maximize:after{opacity:1}.window-title{flex:1;text-align:center;font-size:13px;font-weight:500;color:var(--macos-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 8px;position:relative;z-index:1}.window-content{padding:20px;background:#ffffff8c;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.tag-macos{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;font-size:12px;font-weight:500;border-radius:20px;background:var(--vibrancy-material);color:var(--macos-text-secondary);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);text-decoration:none;transition:all .15s ease}.tag-macos:hover{background:#0071e31f;color:#0071e3;text-decoration:none}.tag-macos.active{background:var(--macos-accent);color:#fff}code{font-family:SF Mono,SFMono-Regular,ui-monospace,Menlo,Monaco,PingFang SC,Hiragino Sans GB,Microsoft YaHei,monospace;font-size:.875em;padding:.16em .46em;background:linear-gradient(180deg,#eef3fb,#e9eff9);border:.5px solid rgba(30,64,175,.24);border-radius:6px;color:#0f2850;font-weight:560;line-height:1.48;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}pre{position:relative;margin:1.35rem 0;padding:2.2rem 1.15rem 1.05rem;overflow-x:auto;background:linear-gradient(180deg,#fffffff7,#f7fafffa),radial-gradient(circle at 20% -10%,rgba(45,123,246,.12) 0%,transparent 44%);border:.5px solid rgba(31,41,55,.14);border-radius:14px;box-shadow:inset 0 1px #ffffffd9,0 10px 24px #111f341f;color:#24292f;font-size:.875rem;line-height:1.7;text-shadow:0 0 0 transparent}pre:before{content:"";position:absolute;left:0;right:0;top:0;height:1.8rem;border-bottom:.5px solid rgba(31,41,55,.12);background:linear-gradient(180deg,#ffffffd1,#f4f8fee6)}pre:after{content:"";position:absolute;top:.56rem;left:.74rem;width:2.15rem;height:.65rem;background:radial-gradient(circle at .33rem .33rem,#ff5f57 .28rem,transparent .3rem),radial-gradient(circle at 1.08rem .33rem,#febc2e .28rem,transparent .3rem),radial-gradient(circle at 1.83rem .33rem,#28c840 .28rem,transparent .3rem);pointer-events:none}pre>code{all:unset;display:block;white-space:pre;word-break:normal;overflow-wrap:normal;tab-size:2;unicode-bidi:plaintext;font-family:SF Mono,SFMono-Regular,ui-monospace,Menlo,Monaco,PingFang SC,Hiragino Sans GB,Microsoft YaHei,monospace;font-size:.9rem;line-height:1.7;font-variant-ligatures:none;color:#24292f}pre code .token.comment,pre code .token.prolog,pre code .token.doctype,pre code .token.cdata{color:#6e7781}pre code .token.punctuation{color:#24292f}pre code .token.property,pre code .token.tag,pre code .token.boolean,pre code .token.number,pre code .token.constant,pre code .token.symbol,pre code .token.deleted,pre code .token.keyword{color:#cf222e}pre code .token.selector,pre code .token.attr-name,pre code .token.string,pre code .token.char,pre code .token.builtin,pre code .token.inserted{color:#0a3069}pre code .token.operator,pre code .token.entity,pre code .token.url,pre code .language-css .token.string,pre code .style .token.string{color:#0550ae}pre code .token.atrule,pre code .token.attr-value,pre code .token.function,pre code .token.class-name{color:#8250df}pre code .token.regex,pre code .token.important,pre code .token.variable{color:#953800}:root[data-code-theme=github-dark] code{background:linear-gradient(180deg,#383f4ab8,#292f3ac7);border-color:#b1bac46b;color:#f0f6fc}:root[data-code-theme=github-dark] pre{background:linear-gradient(180deg,#161b22fa,#0d1117fa),radial-gradient(circle at 20% -10%,rgba(47,129,247,.25) 0%,transparent 44%);border-color:#ffffff1a;box-shadow:inset 0 1px #ffffff0f,0 12px 24px #0000005c;color:#e6edf3}:root[data-code-theme=github-dark] pre:before{border-bottom-color:#ffffff1a;background:linear-gradient(180deg,#21262de6,#161b22eb)}:root[data-code-theme=github-dark] pre>code{color:#e6edf3}:root[data-code-theme=github-dark] pre code .token.comment,:root[data-code-theme=github-dark] pre code .token.prolog,:root[data-code-theme=github-dark] pre code .token.doctype,:root[data-code-theme=github-dark] pre code .token.cdata{color:#8b949e}:root[data-code-theme=github-dark] pre code .token.punctuation{color:#c9d1d9}:root[data-code-theme=github-dark] pre code .token.property,:root[data-code-theme=github-dark] pre code .token.tag,:root[data-code-theme=github-dark] pre code .token.boolean,:root[data-code-theme=github-dark] pre code .token.number,:root[data-code-theme=github-dark] pre code .token.constant,:root[data-code-theme=github-dark] pre code .token.symbol,:root[data-code-theme=github-dark] pre code .token.deleted,:root[data-code-theme=github-dark] pre code .token.keyword{color:#ff7b72}:root[data-code-theme=github-dark] pre code .token.selector,:root[data-code-theme=github-dark] pre code .token.attr-name,:root[data-code-theme=github-dark] pre code .token.string,:root[data-code-theme=github-dark] pre code .token.char,:root[data-code-theme=github-dark] pre code .token.builtin,:root[data-code-theme=github-dark] pre code .token.inserted{color:#a5d6ff}:root[data-code-theme=github-dark] pre code .token.operator,:root[data-code-theme=github-dark] pre code .token.entity,:root[data-code-theme=github-dark] pre code .token.url,:root[data-code-theme=github-dark] pre code .language-css .token.string,:root[data-code-theme=github-dark] pre code .style .token.string{color:#79c0ff}:root[data-code-theme=github-dark] pre code .token.atrule,:root[data-code-theme=github-dark] pre code .token.attr-value,:root[data-code-theme=github-dark] pre code .token.function,:root[data-code-theme=github-dark] pre code .token.class-name{color:#d2a8ff}:root[data-code-theme=github-dark] pre code .token.regex,:root[data-code-theme=github-dark] pre code .token.important,:root[data-code-theme=github-dark] pre code .token.variable{color:#ffa657}:root[data-code-theme=one-dark] code{background:linear-gradient(180deg,#4f556199,#3e444fbf);border-color:#abb2bf6b;color:#f3f6fc}:root[data-code-theme=one-dark] pre{background:linear-gradient(180deg,#282c34,#21252b);border-color:#ffffff14;box-shadow:inset 0 1px #ffffff0d,0 12px 24px #00000059;color:#abb2bf}:root[data-code-theme=one-dark] pre:before{border-bottom-color:#ffffff14;background:linear-gradient(180deg,#3a3f49e6,#2d313aeb)}:root[data-code-theme=one-dark] pre>code{color:#abb2bf}:root[data-code-theme=one-dark] pre code .token.comment,:root[data-code-theme=one-dark] pre code .token.prolog,:root[data-code-theme=one-dark] pre code .token.doctype,:root[data-code-theme=one-dark] pre code .token.cdata{color:#7f848e}:root[data-code-theme=one-dark] pre code .token.punctuation{color:#abb2bf}:root[data-code-theme=one-dark] pre code .token.property,:root[data-code-theme=one-dark] pre code .token.tag,:root[data-code-theme=one-dark] pre code .token.boolean,:root[data-code-theme=one-dark] pre code .token.number,:root[data-code-theme=one-dark] pre code .token.constant,:root[data-code-theme=one-dark] pre code .token.symbol,:root[data-code-theme=one-dark] pre code .token.deleted,:root[data-code-theme=one-dark] pre code .token.keyword{color:#e06c75}:root[data-code-theme=one-dark] pre code .token.selector,:root[data-code-theme=one-dark] pre code .token.attr-name,:root[data-code-theme=one-dark] pre code .token.string,:root[data-code-theme=one-dark] pre code .token.char,:root[data-code-theme=one-dark] pre code .token.builtin,:root[data-code-theme=one-dark] pre code .token.inserted{color:#98c379}:root[data-code-theme=one-dark] pre code .token.operator,:root[data-code-theme=one-dark] pre code .token.entity,:root[data-code-theme=one-dark] pre code .token.url,:root[data-code-theme=one-dark] pre code .language-css .token.string,:root[data-code-theme=one-dark] pre code .style .token.string{color:#56b6c2}:root[data-code-theme=one-dark] pre code .token.atrule,:root[data-code-theme=one-dark] pre code .token.attr-value,:root[data-code-theme=one-dark] pre code .token.function,:root[data-code-theme=one-dark] pre code .token.class-name{color:#c678dd}:root[data-code-theme=one-dark] pre code .token.regex,:root[data-code-theme=one-dark] pre code .token.important,:root[data-code-theme=one-dark] pre code .token.variable{color:#d19a66}:root[data-code-theme=github-light] pre[class*=language-bash] code .token,:root[data-code-theme=github-light] pre[class*=language-shell] code .token,:root[data-code-theme=github-light] pre[data-language=bash] code .token,:root[data-code-theme=github-light] pre[data-language=shell] code .token,:root[data-code-theme=github-dark] pre[class*=language-bash] code .token,:root[data-code-theme=github-dark] pre[class*=language-shell] code .token,:root[data-code-theme=github-dark] pre[data-language=bash] code .token,:root[data-code-theme=github-dark] pre[data-language=shell] code .token,:root[data-code-theme=one-dark] pre[class*=language-bash] code .token,:root[data-code-theme=one-dark] pre[class*=language-shell] code .token,:root[data-code-theme=one-dark] pre[data-language=bash] code .token,:root[data-code-theme=one-dark] pre[data-language=shell] code .token{color:inherit!important}:root[data-code-theme=github-light] pre[class*=language-bash] code .token.parameter.variable,:root[data-code-theme=github-light] pre[class*=language-shell] code .token.parameter.variable,:root[data-code-theme=github-light] pre[data-language=bash] code .token.parameter.variable,:root[data-code-theme=github-light] pre[data-language=shell] code .token.parameter.variable{color:#0550ae!important;font-weight:600}:root[data-code-theme=github-dark] pre[class*=language-bash] code .token.parameter.variable,:root[data-code-theme=github-dark] pre[class*=language-shell] code .token.parameter.variable,:root[data-code-theme=github-dark] pre[data-language=bash] code .token.parameter.variable,:root[data-code-theme=github-dark] pre[data-language=shell] code .token.parameter.variable{color:#79c0ff!important;font-weight:600}:root[data-code-theme=one-dark] pre[class*=language-bash] code .token.parameter.variable,:root[data-code-theme=one-dark] pre[class*=language-shell] code .token.parameter.variable,:root[data-code-theme=one-dark] pre[data-language=bash] code .token.parameter.variable,:root[data-code-theme=one-dark] pre[data-language=shell] code .token.parameter.variable{color:#61afef!important;font-weight:600}blockquote{margin:1.1rem 0;padding:.8rem .95rem;background:linear-gradient(180deg,#ffb8001a,#ffb8000a);border-left:3px solid rgba(245,158,11,.72);border-radius:10px;color:#6b4f00;font-size:.97rem;line-height:1.72;font-style:normal;box-shadow:inset 0 0 0 .5px #f59e0b33}blockquote:before{content:none}blockquote p{margin:.45rem 0}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{border:none;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(0,0,0,.1) 20%,rgba(0,0,0,.1) 80%,transparent 100%);margin:2.5rem 0}img{max-width:100%;height:auto;border-radius:var(--radius-md)}textarea,input[type=text],input[type=email],input[type=password]{font-family:inherit;font-size:15px;border:.5px solid rgba(0,0,0,.12);border-radius:var(--radius-sm);padding:8px 12px;background:#fff;transition:all .2s var(--spring-smooth);box-shadow:inset 0 1px 2px #0000000a}textarea:focus,input:focus{outline:none;border-color:var(--macos-accent);box-shadow:inset 0 1px 2px #0000000a,0 0 0 3px #0071e326}table{width:100%;border-collapse:separate;border-spacing:0;border-radius:var(--radius-md);overflow:hidden;box-shadow:0 0 0 .5px #00000014}th{background:#00000008;font-weight:600;color:var(--macos-text);text-align:left;padding:12px 16px;border-bottom:.5px solid rgba(0,0,0,.08)}td{padding:12px 16px;border-bottom:.5px solid rgba(0,0,0,.06)}tr:last-child td{border-bottom:none}tr:hover td{background:#00000005}ul,ol{padding-left:1.5em;margin:1em 0}li{margin-bottom:.5em;position:relative}li::marker{color:var(--macos-accent)}@keyframes scaleIn{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}.animate-in{animation:scaleIn .5s var(--spring-smooth) backwards}.animate-in:nth-child(1){animation-delay:.05s}.animate-in:nth-child(2){animation-delay:.1s}.animate-in:nth-child(3){animation-delay:.15s}.animate-in:nth-child(4){animation-delay:.2s}.animate-in:nth-child(5){animation-delay:.25s}.animate-in:nth-child(6){animation-delay:.3s}.animate-in:nth-child(7){animation-delay:.35s}.animate-in:nth-child(8){animation-delay:.4s}@media(max-width:768px){body{cursor:auto}a,button,[role=button],input,textarea,select,summary,label,.article-image-zoomable{cursor:pointer}body{font-size:16px}h1{font-size:2rem}h2{font-size:1.6rem}main{padding:1.5rem 1rem 3rem}.app-fx-layer{display:none!important}.stage-intro{filter:none;transform:translateY(10px) scale(.995)}.macos-window{border-radius:var(--radius-md)}.macos-window:hover{transform:none;box-shadow:var(--window-shadow)}.window-content{padding:16px}body.mobile-no-dock main{padding-bottom:1.5rem!important}}::selection{background:#0071e340;color:var(--macos-text)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#00000026;border-radius:8px;border:2px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:#00000040;background-clip:content-box}:focus-visible{outline:2px solid var(--macos-accent);outline-offset:2px}button:focus-visible,a:focus-visible{outline:2px solid var(--macos-accent);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.macos-window:hover{transform:none}body:before{animation:none}body:after,.stage-intro,.js body.is-ready .stage-intro{animation:none!important;transition:none!important}}@media(prefers-color-scheme:dark){:root{--macos-bg: #1e1e1e;--macos-bg-secondary: #2c2c2e;--macos-text: #f5f5f7;--macos-text-secondary: #98989d;--macos-text-tertiary: #6e6e73;--macos-accent: #0a84ff;--macos-accent-hover: #409cff;--macos-accent-light: rgba(10, 132, 255, .2);--window-bg: rgba(30, 30, 30, .6);--window-bg-solid: #2c2c2e;--window-border: rgba(255, 255, 255, .12);--window-border-light: rgba(255, 255, 255, .2);--window-shadow: 0 0 0 1px rgba(0, 0, 0, .3), 0 4px 12px rgba(0, 0, 0, .4), 0 20px 40px rgba(0, 0, 0, .4);--window-shadow-hover: 0 0 0 1px rgba(0, 0, 0, .35), 0 8px 16px rgba(0, 0, 0, .45), 0 24px 50px rgba(0, 0, 0, .5);--glass-bg: rgba(30, 30, 30, .72);--glass-bg-dark: rgba(0, 0, 0, .6);--vibrancy-light: rgba(50, 50, 50, .6);--vibrancy-ultra-light: rgba(60, 60, 60, .5);--vibrancy-material: rgba(40, 40, 40, .85);--dock-bg: rgba(30, 30, 30, .3);--toolbar-bg: rgba(40, 40, 40, .85);--toolbar-border: rgba(255, 255, 255, .1)}body:before{background:none}body:after{opacity:.06}.macos-window:before{background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.15) 20%,rgba(255,255,255,.15) 80%,transparent 100%)}.window-titlebar{background:linear-gradient(180deg,#323232e6,#282828e6);border-bottom:.5px solid rgba(0,0,0,.3)}.window-content{background:#1e1e1e80}:root[data-code-theme=github-dark] code{background:linear-gradient(180deg,#383f4ac7,#292f3ad6);border-color:#b1bac475;color:#f0f6fc}:root[data-code-theme=github-dark] pre{background:linear-gradient(180deg,#161b22fa,#0d1117fa),radial-gradient(circle at 20% -10%,rgba(47,129,247,.25) 0%,transparent 44%);border-color:#ffffff1a;box-shadow:inset 0 1px #ffffff0f,0 12px 24px #0000005c;color:#e6edf3}:root[data-code-theme=github-dark] pre:before{border-bottom-color:#ffffff1a;background:linear-gradient(180deg,#21262de6,#161b22eb)}:root[data-code-theme=github-dark] pre>code{color:#e6edf3}:root[data-code-theme=github-dark] pre code .token.comment,:root[data-code-theme=github-dark] pre code .token.prolog,:root[data-code-theme=github-dark] pre code .token.doctype,:root[data-code-theme=github-dark] pre code .token.cdata{color:#8b949e}:root[data-code-theme=github-dark] pre code .token.punctuation{color:#c9d1d9}:root[data-code-theme=github-dark] pre code .token.property,:root[data-code-theme=github-dark] pre code .token.tag,:root[data-code-theme=github-dark] pre code .token.boolean,:root[data-code-theme=github-dark] pre code .token.number,:root[data-code-theme=github-dark] pre code .token.constant,:root[data-code-theme=github-dark] pre code .token.symbol,:root[data-code-theme=github-dark] pre code .token.deleted,:root[data-code-theme=github-dark] pre code .token.keyword{color:#ff7b72}:root[data-code-theme=github-dark] pre code .token.selector,:root[data-code-theme=github-dark] pre code .token.attr-name,:root[data-code-theme=github-dark] pre code .token.string,:root[data-code-theme=github-dark] pre code .token.char,:root[data-code-theme=github-dark] pre code .token.builtin,:root[data-code-theme=github-dark] pre code .token.inserted{color:#a5d6ff}:root[data-code-theme=github-dark] pre code .token.operator,:root[data-code-theme=github-dark] pre code .token.entity,:root[data-code-theme=github-dark] pre code .token.url,:root[data-code-theme=github-dark] pre code .language-css .token.string,:root[data-code-theme=github-dark] pre code .style .token.string{color:#79c0ff}:root[data-code-theme=github-dark] pre code .token.atrule,:root[data-code-theme=github-dark] pre code .token.attr-value,:root[data-code-theme=github-dark] pre code .token.function,:root[data-code-theme=github-dark] pre code .token.class-name{color:#d2a8ff}:root[data-code-theme=github-dark] pre code .token.regex,:root[data-code-theme=github-dark] pre code .token.important,:root[data-code-theme=github-dark] pre code .token.variable{color:#ffa657}:root[data-code-theme=github-dark] pre[class*=language-bash] code .token,:root[data-code-theme=github-dark] pre[class*=language-shell] code .token,:root[data-code-theme=github-dark] pre[data-language=bash] code .token,:root[data-code-theme=github-dark] pre[data-language=shell] code .token{color:inherit!important}:root[data-code-theme=github-dark] pre[class*=language-bash] code .token.parameter.variable,:root[data-code-theme=github-dark] pre[class*=language-shell] code .token.parameter.variable,:root[data-code-theme=github-dark] pre[data-language=bash] code .token.parameter.variable,:root[data-code-theme=github-dark] pre[data-language=shell] code .token.parameter.variable{color:#79c0ff!important}blockquote{background:linear-gradient(180deg,#ffb80021,#ffb80014);border-left-color:#fcd34db8;color:#fef3c7;box-shadow:inset 0 0 0 .5px #fcd34d33}textarea,input[type=text],input[type=email],input[type=password]{background:#ffffff0d;border-color:#ffffff1a;color:#fff}textarea:focus,input:focus{background:#ffffff1a}th{background:#ffffff14;border-bottom:.5px solid rgba(255,255,255,.1)}td{border-bottom:.5px solid rgba(255,255,255,.08)}tr:hover td{background:#ffffff0d}.traffic-light.close{background:#ff453a}.traffic-light.minimize{background:#ff9f0a}.traffic-light.maximize{background:#32d74b}}
