:root{--text-color:#000;--background-color:#fff;--section-divider-color:#eee;--link-color:#2a7ae2;--link-visited-color:#1756a9;--link-hover-color:#000;--header-link-color:#2b3c69;--secondary-color:#1678D3;--grey-color:#828282;--grey-color-light:#e8e8e8;--grey-color-dark:#424242;--menu-bar-color:#424242;--menu-link-color:#1756a9;--menu-link-hover-background:#eee;--menu-shaddow-color:#ddd;--code-background-color:#f4f0f0;--code-border-color:#f4f0f0;--hero-override-color:#0000;--hero-text-background-color:#FFF8;--hero-text-border-color:#FFFA;--hero-text-color:#2C3C69;--hero-text-highlight-color:#de8216}@media(prefers-color-scheme:dark){:root{--text-color:#eee;--background-color:#000;--section-divider-color:#666;--link-color:#b1d3ff;--link-visited-color:#9fc9ff;--link-hover-color:#fff;--header-link-color:#a4b3db;--secondary-color:#1678D3;--grey-color:#828282;--grey-color-light:#cccccc;--grey-color-dark:#424242;--menu-bar-color:#9c9c9c;--menu-link-color:#90abce;--menu-link-hover-background:#444;--menu-shaddow-color:#111;--code-background-color:#222;--code-border-color:#444;--hero-override-color:#0008;--hero-text-background-color:#0004;--hero-text-border-color:#0004;--hero-text-color:#ddd;--hero-text-highlight-color:#faab52}}body,h1,h2,h3,h4,h5,h6,p,blockquote,pre,hr,dl,dd,ol,ul,figure{margin:0;padding:0;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif;font-size:16px;line-height:1.5;font-weight:400;color:var(--text-color);background-color:var(--background-color);-webkit-text-size-adjust:100%;min-width:300px}@media screen and (max-width:730px){body{font-size:14px}}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,p,blockquote,pre,ul,ol,dl,figure{margin-bottom:16px}img{max-width:100%;vertical-align:middle;margin-top:10px;margin-bottom:18px}figure>img{display:block}figcaption{font-size:14px}ul,ol{margin-left:32px}h1,h2,h3,h4,h5,h6{font-weight:300}@media screen and (max-width:730px){h1{font-size:1.4em;margin-top:30px}}h2.through-line{font-size:14px;display:table;white-space:nowrap;width:100%;margin-bottom:15px;text-transform:uppercase;letter-spacing:.09em;font-weight:700;color:var(--grey-color);margin-top:20px}h2.through-line a{color:var(--header-link-color);text-decoration:none}h2.through-line a:hover{color:var(--header-link-color);text-decoration:underline}@media screen and (max-width:800px){h2.through-line a:hover{text-decoration:none}}h2.through-line:after{background-clip:padding-box;background-image:linear-gradient(transparent 47%,var(--section-divider-color) 48%,var(--section-divider-color) 52%,transparent 52%);content:"";display:table-cell;width:100%;border-left:10px solid var(--background-color)}h4{font-weight:700;margin-bottom:10px}a{color:var(--link-color);text-decoration:none}a:visited{color:var(--link-visited-color)}a:hover{color:var(--link-hover-color);text-decoration:underline}@media screen and (max-width:800px){a:hover{text-decoration:none}}blockquote{color:var(--grey-color);border-left:4px solid var(--section-divider-color);padding-left:16px;font-size:18px;letter-spacing:-1px;font-style:italic}blockquote>:last-child{margin-bottom:0}pre,code{font-size:15px;border:1px solid var(--code-border-color);border-radius:3px;background-color:var(--code-background-color);margin-top:20px;margin-bottom:40px;font-family:Menlo,Monaco,courier new,monospace}@media screen and (max-width:800px){pre,code{font-size:14px}}@media screen and (max-width:730px){pre,code{font-size:12px}}code{padding:1px 5px}pre{padding:8px 12px;overflow-x:auto}pre>code{border:0;background-color:transparent;padding-right:0;padding-left:0}.wrapper,.hero.slim div.container{max-width:calc(1e3px - (32px * 2));margin-right:auto;margin-left:auto;padding-right:32px;padding-left:32px;position:relative}@media screen and (max-width:800px){.wrapper,.hero.slim div.container{max-width:calc(800px - (32px));padding-right:16px;padding-left:16px}}.wrapper:after,.hero.slim div.container:after{content:"";display:table;clear:both}.icon>svg{display:inline-block;width:16px;height:16px;vertical-align:middle}.icon>svg path{fill:var(--grey-color)}.flex{display:flex}.flex1{flex:1}.flex2{flex:2}.flex3{flex:3}.dib{display:inline-block}.di{display:inline}.justify{text-align:justify}.tal{text-align:left}.tar{text-align:right}.mlr20{margin-left:20%;margin-right:20%}.mr1m{margin-right:1em}.ml1m{margin-left:1em}.page-content{padding-top:32px}@media screen and (max-width:800px){.page-content{padding-top:0}}.page-heading{font-size:20px}.post-list{margin-left:0;list-style:none}.post-list h2{margin-bottom:5px}.post-list>li{margin-bottom:32px}.post-meta{font-size:14px;color:var(--grey-color)}.post-link{display:block;font-size:28px}@media screen and (max-width:730px){.post-link{font-size:20px}}.post-header{margin-bottom:32px}.post-title,h1{font-size:42px;letter-spacing:normal;line-height:1.25}@media screen and (max-width:800px){.post-title,h1{font-size:36px;margin-top:26px}}@media screen and (max-width:730px){.post-title,h1{font-size:30px;margin-top:10px}}.post-content{margin-bottom:64px}.post-content img{display:block;margin:10px auto 18px;max-width:min(100%,900px);max-height:800px;height:auto}.post-content video{display:block;margin:10px auto 18px;max-width:min(100%,800px)}.post-content h2{font-size:32px}@media screen and (max-width:800px){.post-content h2{font-size:28px}}@media screen and (max-width:730px){.post-content h2{font-size:24px}}.post-content h3{font-size:26px}@media screen and (max-width:800px){.post-content h3{font-size:22px}}@media screen and (max-width:730px){.post-content h3{font-size:20px}}.post-content h4{font-size:20px}@media screen and (max-width:800px){.post-content h4{font-size:18px}}@media screen and (max-width:730px){.post-content h4{font-size:16px}}.post-comments{margin-top:40px;margin-bottom:30px;padding-top:20px;border-top:2px solid var(--section-divider-color)}.home{margin-top:0}.home .post-link{font-size:22px}.home .posts-container{width:90%;vertical-align:top;margin:auto}@media screen and (max-width:730px){.home .posts-container{width:100%;margin-left:0%}}#skiplink{position:absolute;clip:rect(1px 1px 1px 1px);overflow:hidden;height:1px}#skiplink:focus{position:static;clip:auto;overflow:visible;height:auto}#header{min-height:108px;position:relative}#header .site-logo{top:7px;left:0;line-height:56px;position:absolute}#header .site-logo img{max-width:250px;height:auto;margin-bottom:18px;margin-top:10px}#header #site-nav{position:absolute;top:10px;right:0}#header #site-nav #menu-toggler{display:none;width:26px;margin-top:20px;margin-right:20px;padding:10px;cursor:pointer}#header #site-nav #menu-toggler .top-bar,#header #site-nav #menu-toggler .middle-bar,#header #site-nav #menu-toggler .bottom-bar{width:26px;display:block;height:2px;background-color:var(--menu-bar-color);transition:all .3s ease}#header #site-nav #menu-toggler .middle-bar,#header #site-nav #menu-toggler .bottom-bar{margin-top:5px}#header #site-nav #menu{width:100%;white-space:nowrap}#header #site-nav #menu .menu-list{display:inline-block;list-style:none;margin:25px 0 0;padding:0;position:relative}#header #site-nav #menu .menu-list .menu-item{display:inline-block;vertical-align:middle;padding:10px 20px;margin:0}#header #site-nav #menu .menu-list .menu-item a{font-size:18px;color:var(--menu-link-color)}#header #site-nav #menu .menu-list .menu-item.has-children{position:relative}#header #site-nav #menu .menu-list .menu-item.has-children .children-indicator{font-size:small;display:inline-block;transform:rotate(90deg);transition:all .3s ease}#header #site-nav #menu .menu-list .menu-item.has-children .menu-children{right:0;top:auto;width:inherit;height:0;text-align:right;padding:10px 20px;border:1px solid var(--background-color);background-color:var(--background-color);position:absolute;overflow:hidden;z-index:3;transition:all .3s}#header #site-nav #menu .menu-list .menu-item.has-children .menu-children .menu-item{display:block;padding:10px}#header #site-nav #menu .menu-list .menu-item.has-children:hover .children-indicator{transform:rotate(0)}#header #site-nav #menu .menu-list .menu-item.has-children:hover .menu-children{height:90px;border:1px solid var(--background-color)}@media screen and (max-width:800px){#header{min-height:98px}#header .site-logo img{max-width:220px}#header #site-nav{right:0;width:350px;text-align:right}#header #site-nav #menu-toggler{display:inline-block}#header #site-nav #menu-toggler .top-bar,#header #site-nav #menu-toggler .middle-bar,#header #site-nav #menu-toggler .bottom-bar{opacity:1;width:26px;display:block;height:2px;background-color:var(--menu-bar-color);transition:all .3s ease}#header #site-nav #menu-toggler .middle-bar,#header #site-nav #menu-toggler .bottom-bar{margin-top:5px}#header #site-nav #menu{width:100%;white-space:nowrap}#header #site-nav #menu .menu-list{display:block;background-color:var(--background-color);margin:15px 20px 0 0;z-index:3;transition:all .3s ease;height:0;overflow:hidden;border:1px solid var(--background-color);box-shadow:0 0 0 var(--background-color)}#header #site-nav #menu .menu-list .menu-item{display:block;text-align:left;padding:0}#header #site-nav #menu .menu-list .menu-item .menu-link{font-size:16px;color:var(--menu-link-color);display:block;padding:10px 20px}#header #site-nav #menu .menu-list .menu-item .menu-link:hover{background:var(--menu-link-hover-background)}#header #site-nav #menu .menu-list .menu-item.has-children{position:relative}#header #site-nav #menu .menu-list .menu-item.has-children .children-indicator{transform:rotate(0)}#header #site-nav #menu .menu-list .menu-item.has-children .menu-children{width:100%;height:auto;text-align:left;padding:0;margin-top:0;border:none}#header #site-nav #menu .menu-list .menu-item.has-children .menu-children .menu-item{display:block;padding:0}#header #site-nav #menu .menu-list .menu-item.has-children .menu-children .menu-item .menu-link{padding:10px 20px 10px 60px}#header #site-nav #menu .menu-list .menu-item.has-children:hover .children-indicator{transform:rotate(0)}#header #site-nav #menu .menu-list .menu-item.has-children:hover .menu-children{height:auto;border:none}#header #site-nav.open #menu-toggler .top-bar{transform:rotate(45deg);transform-origin:10% 10%}#header #site-nav.open #menu-toggler .middle-bar{opacity:0}#header #site-nav.open #menu-toggler .bottom-bar{transform:rotate(-45deg);transform-origin:10% 90%}#header #site-nav.open #menu .menu-list{height:180px;border:1px solid var(--background-color);box-shadow:0 0 10px var(--menu-shaddow-color)}}@media screen and (max-width:730px){#header .site-logo img{max-width:200px}#header #site-nav{width:100%}#header #site-nav #menu{width:100%;white-space:nowrap}#header #site-nav #menu .menu-list{margin:15px 0 0}#header #site-nav #menu .menu-list .menu-item .menu-link{padding:15px 0 15px 35px}#header #site-nav #menu .menu-list .menu-item.has-children{position:relative}#header #site-nav #menu .menu-list .menu-item.has-children .menu-children .menu-item .menu-link{padding:15px 0 15px 70px}#header #site-nav.open #menu .menu-list{height:220px;border:1px solid transparent;box-shadow:0 5px 5px var(--menu-shaddow-color)}}.hero{position:relative}.hero .hero-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:var(--hero-override-color)}.hero.tall{padding:55px 0;text-align:center;background:var(--hero-text-background-color)url(/images/topbar/3.jpg)no-repeat 50%;background-size:cover}@media screen and (max-width:730px){.hero.tall{padding:50px 0}}.hero.tall div.container{position:relative;background-color:var(--hero-text-background-color);border:1px solid var(--hero-text-border-color);border-radius:10px;padding:30px;width:90%;max-width:950px;margin:0 auto}@media screen and (max-width:730px){.hero.tall div.container{max-width:90%;border-radius:0;padding:10px}}.hero.tall h1{font-weight:400;font-size:40px;color:var(--hero-text-color);line-height:1.4;margin:0 0 .35em}@media screen and (max-width:730px){.hero.tall h1{font-size:26px}}.hero.tall h1 span{color:var(--hero-text-highlight-color);font-weight:700}.hero.tall h2{font-weight:400;margin-bottom:0;font-size:20px}.hero.tall p{color:var(--hero-text-color)}.hero.slim{padding-top:25px;padding-bottom:18px;text-align:center;background:var(--hero-text-background-color)url(/images/topbar/3.jpg)no-repeat 50%;background-size:cover}.hero.slim div.container{text-align:left;width:90%;margin:0 auto}@media screen and (max-width:730px){.hero.slim div.container{max-width:90%;border-radius:0}}.hero.slim h1{font-weight:400;margin-bottom:10px;font-size:46px;display:inline-block;width:auto;color:var(--hero-text-color);background-color:var(--hero-text-background-color);border-radius:8px;padding:10px 20px}@media screen and (max-width:730px){.hero.slim h1{font-size:30px;margin-top:10px}}.hero.slim h1 span{color:var(--secondary-color)}.comments-container{position:relative}.comments-container .leancloud_visitors{position:absolute;bottom:0;left:0}.comments-container .leancloud_visitors .post-meta-item-text,.comments-container .leancloud_visitors .leancloud-visitors-count{color:color-mix(in srgb,var(--text-color) 30%,transparent)}#footer{border-top:1px solid var(--section-divider-color);padding-top:10px}#footer ul{list-style:none;margin-left:0}#footer .wrapper,#footer .hero.slim div.container,.hero.slim #footer div.container{font-size:15px;color:var(--text-color);margin:auto}#footer .wrapper .left,#footer .hero.slim div.container .left,.hero.slim #footer div.container .left,#footer .wrapper .right,#footer .hero.slim div.container .right,.hero.slim #footer div.container .right{margin-bottom:16px;padding-left:16px;width:calc(100% - (32px/2))}#footer .wrapper .left span.item,#footer .hero.slim div.container .left span.item,.hero.slim #footer div.container .left span.item,#footer .wrapper .right span.item,#footer .hero.slim div.container .right span.item,.hero.slim #footer div.container .right span.item{height:35px;margin-bottom:15px}#footer .wrapper .left span.item,#footer .hero.slim div.container .left span.item,.hero.slim #footer div.container .left span.item{float:left;margin-right:15px}#footer .wrapper .right span.item,#footer .hero.slim div.container .right span.item,.hero.slim #footer div.container .right span.item{float:right;margin-left:15px}@media screen and (max-width:730px){#footer .wrapper .left span.item,#footer .hero.slim div.container .left span.item,.hero.slim #footer div.container .left span.item,#footer .wrapper .right span.item,#footer .hero.slim div.container .right span.item,.hero.slim #footer div.container .right span.item{margin:0;display:block;float:none}}#dev-icon{position:fixed;bottom:0;right:0;padding:0 8px;background:#de8216;font-weight:700;font-size:12px;color:#fff}.with-ratio{position:relative;width:100%;height:auto;max-width:600px;margin:0 auto 15px}.with-ratio:before{content:"";display:block}.with-ratio .content{position:absolute;top:0;bottom:0;left:0;right:0}.with-ratio.ratio-w1h1:before{padding-top:100%}.with-ratio.ratio-w16h9:before{padding-top:56.25%}.with-ratio.ratio-w16h10:before{padding-top:62.5%}.with-ratio.ratio-w2h1:before{padding-top:50%}.with-ratio.ratio-w1h2:before{padding-top:200%}.with-ratio.ratio-w4h3:before{padding-top:75%}.with-ratio.ratio-w5h3:before{padding-top:60%}.bg{background-color:#f7f7f7}.chroma{background-color:#f7f7f7;-webkit-text-size-adjust:none}.chroma .err{color:#f6f8fa;background-color:#82071e}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#dedede}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#cf222e}.chroma .kc{color:#cf222e}.chroma .kd{color:#cf222e}.chroma .kn{color:#cf222e}.chroma .kp{color:#cf222e}.chroma .kr{color:#cf222e}.chroma .kt{color:#cf222e}.chroma .na{color:#1f2328}.chroma .nc{color:#1f2328}.chroma .no{color:#0550ae}.chroma .nd{color:#0550ae}.chroma .ni{color:#6639ba}.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#24292e}.chroma .nx{color:#1f2328}.chroma .nt{color:#0550ae}.chroma .nb{color:#6639ba}.chroma .bp{color:#6a737d}.chroma .nv{color:#953800}.chroma .vc{color:#953800}.chroma .vg{color:#953800}.chroma .vi{color:#953800}.chroma .vm{color:#953800}.chroma .nf{color:#6639ba}.chroma .fm{color:#6639ba}.chroma .s{color:#0a3069}.chroma .sa{color:#0a3069}.chroma .sb{color:#0a3069}.chroma .sc{color:#0a3069}.chroma .dl{color:#0a3069}.chroma .sd{color:#0a3069}.chroma .s2{color:#0a3069}.chroma .se{color:#0a3069}.chroma .sh{color:#0a3069}.chroma .si{color:#0a3069}.chroma .sx{color:#0a3069}.chroma .sr{color:#0a3069}.chroma .s1{color:#0a3069}.chroma .ss{color:#032f62}.chroma .m{color:#0550ae}.chroma .mb{color:#0550ae}.chroma .mf{color:#0550ae}.chroma .mh{color:#0550ae}.chroma .mi{color:#0550ae}.chroma .il{color:#0550ae}.chroma .mo{color:#0550ae}.chroma .o{color:#0550ae}.chroma .ow{color:#0550ae}.chroma .or{color:#0550ae}.chroma .p{color:#1f2328}.chroma .c{color:#57606a}.chroma .ch{color:#57606a}.chroma .cm{color:#57606a}.chroma .c1{color:#57606a}.chroma .cs{color:#57606a}.chroma .cp{color:#57606a}.chroma .cpf{color:#57606a}.chroma .gd{color:#82071e;background-color:#ffebe9}.chroma .ge{color:#1f2328}.chroma .gi{color:#116329;background-color:#dafbe1}.chroma .go{color:#1f2328}.chroma .gl{text-decoration:underline}.chroma .w{color:#fff}@media(prefers-color-scheme:dark){.bg{color:#e6edf3;background-color:#0d1117}.chroma{color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none}.chroma .err{color:#f85149}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#6e7681}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}.chroma .line{display:flex}.chroma .k{color:#ff7b72}.chroma .kc{color:#79c0ff}.chroma .kd{color:#ff7b72}.chroma .kn{color:#ff7b72}.chroma .kp{color:#79c0ff}.chroma .kr{color:#ff7b72}.chroma .kt{color:#ff7b72}.chroma .nc{color:#f0883e;font-weight:700}.chroma .no{color:#79c0ff;font-weight:700}.chroma .nd{color:#d2a8ff;font-weight:700}.chroma .ni{color:#ffa657}.chroma .ne{color:#f0883e;font-weight:700}.chroma .nl{color:#79c0ff;font-weight:700}.chroma .nn{color:#ff7b72}.chroma .nx{color:#e6edf3}.chroma .py{color:#79c0ff}.chroma .nt{color:#7ee787}.chroma .nv{color:#79c0ff}.chroma .vc{color:#79c0ff}.chroma .vg{color:#79c0ff}.chroma .vi{color:#79c0ff}.chroma .vm{color:#79c0ff}.chroma .nf{color:#d2a8ff;font-weight:700}.chroma .fm{color:#d2a8ff;font-weight:700}.chroma .l{color:#a5d6ff}.chroma .ld{color:#79c0ff}.chroma .s{color:#a5d6ff}.chroma .sa{color:#79c0ff}.chroma .sb{color:#a5d6ff}.chroma .sc{color:#a5d6ff}.chroma .dl{color:#79c0ff}.chroma .sd{color:#a5d6ff}.chroma .s2{color:#a5d6ff}.chroma .se{color:#79c0ff}.chroma .sh{color:#79c0ff}.chroma .si{color:#a5d6ff}.chroma .sx{color:#a5d6ff}.chroma .sr{color:#79c0ff}.chroma .s1{color:#a5d6ff}.chroma .ss{color:#a5d6ff}.chroma .m{color:#a5d6ff}.chroma .mb{color:#a5d6ff}.chroma .mf{color:#a5d6ff}.chroma .mh{color:#a5d6ff}.chroma .mi{color:#a5d6ff}.chroma .il{color:#a5d6ff}.chroma .mo{color:#a5d6ff}.chroma .o{color:#ff7b72;font-weight:700}.chroma .ow{color:#ff7b72;font-weight:700}.chroma .or{color:#ff7b72;font-weight:700}.chroma .c{color:#8b949e;font-style:italic}.chroma .ch{color:#8b949e;font-style:italic}.chroma .cm{color:#8b949e;font-style:italic}.chroma .c1{color:#8b949e;font-style:italic}.chroma .cs{color:#8b949e;font-weight:700;font-style:italic}.chroma .cp{color:#8b949e;font-weight:700;font-style:italic}.chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}.chroma .gd{color:#ffa198;background-color:#490202}.chroma .ge{font-style:italic}.chroma .gr{color:#ffa198}.chroma .gh{color:#79c0ff;font-weight:700}.chroma .gi{color:#56d364;background-color:#0f5323}.chroma .go{color:#8b949e}.chroma .gp{color:#8b949e}.chroma .gs{font-weight:700}.chroma .gu{color:#79c0ff}.chroma .gt{color:#ff7b72}.chroma .gl{text-decoration:underline}.chroma .w{color:#6e7681}.chroma .na,.chroma .nb,.chroma .bp,.chroma .p,.chroma .ge{color:inherit}.chroma .err{background-color:transparent}}