.icon-sn-google{background-position:0 -28px}.icon-sn-bg-google{background-color:#4285f4;background-position:0 0}.fa-sn-google{color:#4285f4}.icon-sn-github{background-position:-28px -28px}.icon-sn-bg-github{background-color:#333;background-position:-28px 0}.fa-sn-github{color:#333}.icon-sn-weibo{background-position:-56px -28px}.icon-sn-bg-weibo{background-color:#e90d24;background-position:-56px 0}.fa-sn-weibo{color:#e90d24}.icon-sn-qq{background-position:-84px -28px}.icon-sn-bg-qq{background-color:#0098e6;background-position:-84px 0}.fa-sn-qq{color:#0098e6}.icon-sn-twitter{background-position:-112px -28px}.icon-sn-bg-twitter{background-color:#50abf1;background-position:-112px 0}.fa-sn-twitter{color:#50abf1}.icon-sn-facebook{background-position:-140px -28px}.icon-sn-bg-facebook{background-color:#4862a3;background-position:-140px 0}.fa-sn-facebook{color:#4862a3}.icon-sn-renren{background-position:-168px -28px}.icon-sn-bg-renren{background-color:#197bc8;background-position:-168px 0}.fa-sn-renren{color:#197bc8}.icon-sn-tqq{background-position:-196px -28px}.icon-sn-bg-tqq{background-color:#1f9ed2;background-position:-196px 0}.fa-sn-tqq{color:#1f9ed2}.icon-sn-douban{background-position:-224px -28px}.icon-sn-bg-douban{background-color:#279738;background-position:-224px 0}.fa-sn-douban{color:#279738}.icon-sn-weixin{background-position:-252px -28px}.icon-sn-bg-weixin{background-color:#00b500;background-position:-252px 0}.fa-sn-weixin{color:#00b500}.icon-sn-dotted{background-position:-280px -28px}.icon-sn-bg-dotted{background-color:#eee;background-position:-280px 0}.fa-sn-dotted{color:#eee}.icon-sn-site{background-position:-308px -28px}.icon-sn-bg-site{background-color:#00b500;background-position:-308px 0}.fa-sn-site{color:#00b500}.icon-sn-linkedin{background-position:-336px -28px}.icon-sn-bg-linkedin{background-color:#0077b9;background-position:-336px 0}.fa-sn-linkedin{color:#0077b9}[class*=icon-sn-]{display:inline-block;background-image:url('/static/blog/img/icon-sn.svg?3380ca96c860');background-repeat:no-repeat;width:28px;height:28px;vertical-align:middle;background-size:auto 56px}[class*=icon-sn-]:hover{opacity:.8;filter:alpha(opacity=80)}.btn-sn-google{background:#4285f4}.btn-sn-google:active,.btn-sn-google:focus,.btn-sn-google:hover{background:#2a75f3}.btn-sn-github{background:#333}.btn-sn-github:active,.btn-sn-github:focus,.btn-sn-github:hover{background:#262626}.btn-sn-weibo{background:#e90d24}.btn-sn-weibo:active,.btn-sn-weibo:focus,.btn-sn-weibo:hover{background:#d10c20}.btn-sn-qq{background:#0098e6}.btn-sn-qq:active,.btn-sn-qq:focus,.btn-sn-qq:hover{background:#0087cd}.btn-sn-twitter{background:#50abf1}.btn-sn-twitter:active,.btn-sn-twitter:focus,.btn-sn-twitter:hover{background:#38a0ef}.btn-sn-facebook{background:#4862a3}.btn-sn-facebook:active,.btn-sn-facebook:focus,.btn-sn-facebook:hover{background:#405791}.btn-sn-renren{background:#197bc8}.btn-sn-renren:active,.btn-sn-renren:focus,.btn-sn-renren:hover{background:#166db1}.btn-sn-tqq{background:#1f9ed2}.btn-sn-tqq:active,.btn-sn-tqq:focus,.btn-sn-tqq:hover{background:#1c8dbc}.btn-sn-douban{background:#279738}.btn-sn-douban:active,.btn-sn-douban:focus,.btn-sn-douban:hover{background:#228330}.btn-sn-weixin{background:#00b500}.btn-sn-weixin:active,.btn-sn-weixin:focus,.btn-sn-weixin:hover{background:#009c00}.btn-sn-dotted{background:#eee}.btn-sn-dotted:active,.btn-sn-dotted:focus,.btn-sn-dotted:hover{background:#e1e1e1}.btn-sn-site{background:#00b500}.btn-sn-site:active,.btn-sn-site:focus,.btn-sn-site:hover{background:#009c00}.btn-sn-linkedin{background:#0077b9}.btn-sn-linkedin:active,.btn-sn-linkedin:focus,.btn-sn-linkedin:hover{background:#0067a0}[class*=btn-sn-],[class*=btn-sn-]:active,[class*=btn-sn-]:focus,[class*=btn-sn-]:hover{border:none;color:#fff}.btn-sn-more{padding:0}.btn-sn-more,.btn-sn-more:active,.btn-sn-more:hover{box-shadow:none}[class*=btn-sn-] [class*=icon-sn-]{background-color:transparent}.codehilite .hll{background-color:#ffffcc}.codehilite{background:#ffffff}.codehilite .c{color:#177500}.codehilite .err{color:#000000}.codehilite .k{color:#A90D91}.codehilite .l{color:#1C01CE}.codehilite .n{color:#000000}.codehilite .o{color:#000000}.codehilite .ch{color:#177500}.codehilite .cm{color:#177500}.codehilite .cp{color:#633820}.codehilite .cpf{color:#177500}.codehilite .c1{color:#177500}.codehilite .cs{color:#177500}.codehilite .kc{color:#A90D91}.codehilite .kd{color:#A90D91}.codehilite .kn{color:#A90D91}.codehilite .kp{color:#A90D91}.codehilite .kr{color:#A90D91}.codehilite .kt{color:#A90D91}.codehilite .ld{color:#1C01CE}.codehilite .m{color:#1C01CE}.codehilite .s{color:#C41A16}.codehilite .na{color:#836C28}.codehilite .nb{color:#A90D91}.codehilite .nc{color:#3F6E75}.codehilite .no{color:#000000}.codehilite .nd{color:#000000}.codehilite .ni{color:#000000}.codehilite .ne{color:#000000}.codehilite .nf{color:#000000}.codehilite .nl{color:#000000}.codehilite .nn{color:#000000}.codehilite .nx{color:#000000}.codehilite .py{color:#000000}.codehilite .nt{color:#000000}.codehilite .nv{color:#000000}.codehilite .ow{color:#000000}.codehilite .mb{color:#1C01CE}.codehilite .mf{color:#1C01CE}.codehilite .mh{color:#1C01CE}.codehilite .mi{color:#1C01CE}.codehilite .mo{color:#1C01CE}.codehilite .sb{color:#C41A16}.codehilite .sc{color:#2300CE}.codehilite .sd{color:#C41A16}.codehilite .s2{color:#C41A16}.codehilite .se{color:#C41A16}.codehilite .sh{color:#C41A16}.codehilite .si{color:#C41A16}.codehilite .sx{color:#C41A16}.codehilite .sr{color:#C41A16}.codehilite .s1{color:#C41A16}.codehilite .ss{color:#C41A16}.codehilite .bp{color:#5B269A}.codehilite .vc{color:#000000}.codehilite .vg{color:#000000}.codehilite .vi{color:#000000}.codehilite .il{color:#1C01CE}#nprogress{pointer-events:none}#nprogress .bar{background:red;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1.0;-webkit-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translate(0px,-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:red;border-left-color:red;border-radius:50%;-webkit-animation:nprogress-spinner 400ms linear infinite;animation:nprogress-spinner 400ms linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .spinner,.nprogress-custom-parent #nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.comment-actions{display:flex;gap:15px;margin-top:10px;align-items:center}.like{display:flex;align-items:center}.like-btn{background:none;border:1px solid #ddd;border-radius:20px;padding:5px 12px;cursor:pointer;transition:all 0.3s ease;display:flex;align-items:center;gap:5px;font-size:12px;color:#666;text-decoration:none}.like-btn:hover{background-color:#f0f0f0;border-color:#999;color:#333;text-decoration:none}.like-btn:active{transform:scale(0.95)}.like-btn.liked{background-color:#ff6b6b;color:white;border-color:#ff6b6b;transform:scale(1.05)}.like-icon{font-size:14px;transition:transform 0.3s ease}.like-btn:hover .like-icon{transform:scale(1.2)}.like-count{font-size:12px;font-weight:bold;min-width:20px;text-align:center}.message{position:fixed;top:20px;right:20px;padding:12px 20px;border-radius:5px;color:white;font-weight:bold;z-index:1000;box-shadow:0 4px 12px rgba(0,0,0,0.15);max-width:300px;word-wrap:break-word}.message.success{background-color:#4CAF50;border-left:4px solid #45a049}.message.error{background-color:#f44336;border-left:4px solid #d32f2f}@keyframes slideIn{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}@keyframes slideOut{from{transform:translateX(0);opacity:1}to{transform:translateX(100%);opacity:0}}@keyframes likeAnimation{0%{transform:scale(1)}50%{transform:scale(1.3)}100%{transform:scale(1)}}.like-btn.liked .like-icon{animation:likeAnimation 0.6s ease-in-out}@media (max-width:768px){.comment-actions{flex-direction:column;gap:10px;align-items:flex-start}.like-btn{padding:8px 15px;font-size:14px}.message{right:10px;left:10px;max-width:none}}@media (prefers-color-scheme:dark){.like-btn{border-color:#555;color:#ccc}.like-btn:hover{background-color:#333;border-color:#777;color:#fff}}.like-btn:focus{outline:2px solid #007cba;outline-offset:2px}.like-btn:focus:not(:focus-visible){outline:none}.like-btn.loading{opacity:0.6;cursor:not-allowed;pointer-events:none}.like-btn.loading .like-icon{animation:spin 1s linear infinite}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.article-actions{display:flex;gap:15px;margin-top:10px;align-items:center;padding:10px 0;border-top:1px solid #eee}.like-article{display:flex;align-items:center}.like-article-btn{border:none;border-radius:25px;padding:4px 12px;cursor:pointer;display:flex;align-items:center;gap:8px;font-size:13px;font-weight:500}.like-article-btn:hover{transform:translateY(-2px);text-decoration:none}.like-article-btn:active{transform:scale(0.95)}.like-article-btn.liked{background:linear-gradient(45deg,#ff6b6b,#ee5a24);transform:scale(1.05);box-shadow:0 4px 12px rgba(255,107,107,0.4)}.like-icon{font-size:16px;transition:transform 0.3s ease}.like-article-btn:hover .like-icon{transform:scale(1.2)}.like-count{font-size:14px;font-weight:bold;min-width:20px;text-align:center}.like-text{font-size:14px;font-weight:500}.message{position:fixed;top:20px;right:20px;padding:12px 20px;border-radius:5px;color:white;font-weight:bold;z-index:1000;box-shadow:0 4px 12px rgba(0,0,0,0.15);max-width:300px;word-wrap:break-word}.message.success{background-color:#4CAF50;border-left:4px solid #45a049}.message.error{background-color:#f44336;border-left:4px solid #d32f2f}@keyframes slideIn{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}@keyframes slideOut{from{transform:translateX(0);opacity:1}to{transform:translateX(100%);opacity:0}}@keyframes likeAnimation{0%{transform:scale(1)}50%{transform:scale(1.3)}100%{transform:scale(1)}}.like-article-btn.liked .like-icon{animation:likeAnimation 0.6s ease-in-out}@media (max-width:768px){.article-actions{flex-direction:column;gap:10px;align-items:flex-start}.like-article-btn{padding:10px 20px;font-size:16px;width:100%;justify-content:center}.message{right:10px;left:10px;max-width:none}}@media (prefers-color-scheme:dark){.article-actions{border-top-color:#444}.like-article-btn{background:linear-gradient(45deg,#4a5568,#2d3748)}.like-article-btn:hover{background:linear-gradient(45deg,#5a6c7d,#3d4a5d)}}.like-article-btn:focus{outline:2px solid #007cba;outline-offset:2px}.like-article-btn:focus:not(:focus-visible){outline:none}.like-article-btn.loading{opacity:0.6;cursor:not-allowed;pointer-events:none}.like-article-btn.loading .like-icon{animation:spin 1s linear infinite}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.comment-actions .like-btn{background:linear-gradient(45deg,#ff6b6b,#ee5a24);border:none;color:white;border-radius:20px;padding:5px 12px;font-size:12px}.comment-actions .like-btn:hover{background:linear-gradient(45deg,#ff5252,#d32f2f);transform:translateY(-1px);box-shadow:0 2px 8px rgba(255,107,107,0.3)}.article-index-page #primary{padding:0}.article-index-content{margin-top:0;background:linear-gradient(180deg,#f8fafc 0%,#ffffff 8rem);min-height:0}.article-index-hero{text-align:center;padding:2.25rem 1.25rem 2.75rem;margin:0 -24px 0;min-height:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,#0c1222 0%,#1a2744 35%,#1e3a5f 70%,#0f172a 100%);color:#f8fafc;position:relative;overflow:hidden}.article-index-hero::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:radial-gradient(ellipse 100% 80% at 50% -30%,rgba(56,189,248,0.18),transparent 55%);pointer-events:none}.article-index-hero::after{content:'';position:absolute;bottom:0;left:0;right:0;height:2.5rem;background:linear-gradient(to top,rgba(15,23,42,0.6),transparent);pointer-events:none}.hero-inner{position:relative;z-index:1;max-width:36rem;margin:0 auto}.article-index-hero .hero-label{font-size:0.6875rem;font-weight:600;letter-spacing:0.18em;text-transform:uppercase;color:rgba(248,250,252,0.6);margin:0 0 0.5rem}.article-index-hero .hero-title{font-size:1.625rem;font-weight:700;letter-spacing:-0.03em;line-height:1.25;margin:0 0 0.5rem;position:relative}@media (min-width:768px){.article-index-hero{padding:2.75rem 1.5rem 3rem;min-height:0}.article-index-hero .hero-title{font-size:2rem}}.article-index-hero .hero-subtitle{font-size:0.9375rem;font-weight:400;opacity:0.9;line-height:1.5;margin:0 auto 1.25rem;position:relative}@media (min-width:768px){.article-index-hero .hero-subtitle{font-size:1rem}}.article-index-hero .hero-actions{display:flex;gap:0.75rem;justify-content:center;flex-wrap:wrap;position:relative}.article-index-hero .hero-btn{display:inline-block;padding:0.5rem 1.25rem;font-size:0.875rem;font-weight:600;text-decoration:none;border-radius:0.5rem;transition:background-color 0.2s,color 0.2s,transform 0.2s,box-shadow 0.2s}.article-index-hero .hero-btn-primary{background:#38bdf8;color:#0f172a;box-shadow:0 4px 14px -2px rgba(56,189,248,0.4)}.article-index-hero .hero-btn-primary:hover{background:#7dd3fc;color:#0f172a;transform:translateY(-2px);box-shadow:0 8px 24px -4px rgba(56,189,248,0.45)}.article-index-hero .hero-btn-secondary{background:rgba(248,250,252,0.1);color:#f8fafc;border:1px solid rgba(248,250,252,0.28)}.article-index-hero .hero-btn-secondary:hover{background:rgba(248,250,252,0.18);border-color:rgba(248,250,252,0.45);transform:translateY(-2px)}.article-index-archive-header{text-align:center;padding:3rem 1.5rem 2.5rem;margin-bottom:0;background:linear-gradient(180deg,#f1f5f9 0%,#fff 100%);border-bottom:1px solid #e2e8f0}.article-index-archive-header .archive-title{font-size:1.375rem;font-weight:600;color:#334155;margin:0;text-transform:none;letter-spacing:-0.02em}.article-index-archive-header .archive-title span{color:#0ea5e9}.article-index-list{max-width:800px;margin:0 auto;padding:2.5rem 24px 4rem}.article-index-section-title{font-size:0.8125rem;font-weight:600;letter-spacing:0.12em;text-transform:uppercase;color:#64748b;margin:0 0 2rem;padding-bottom:0.75rem;border-bottom:1px solid #e2e8f0}.article-index-content .article-card{background:#fff;border:1px solid #e2e8f0;border-radius:1rem;padding:2rem 1.75rem;margin-bottom:1.75rem;position:relative;overflow:hidden;transition:box-shadow 0.25s ease,border-color 0.25s ease,transform 0.25s ease}.article-index-content .article-card::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(180deg,#0ea5e9,#38bdf8);opacity:0;transition:opacity 0.25s ease}.article-index-content .article-card:hover{box-shadow:0 20px 50px -16px rgba(15,23,42,0.18);border-color:#cbd5e1;transform:translateY(-2px)}.article-index-content .article-card:hover::before{opacity:1}.article-index-content .article-card article{border-bottom:none;margin-bottom:0;padding-bottom:0}.article-index-content .article-card .entry-header .entry-title{font-size:1.3125rem;font-weight:600;letter-spacing:-0.02em;line-height:1.35}.article-index-content .article-card .entry-header .entry-title a{color:#1e293b}.article-index-content .article-card .entry-header .entry-title a:hover{color:#0ea5e9}.article-index-content .article-card .entry-header .comments-link,.article-index-content .article-card .entry-header .article-actions{margin-top:0.75rem}.article-index-content .article-card .entry-content{margin-top:1.125rem;color:#475569;font-size:0.9375rem;line-height:1.7}.article-index-content .article-card .read-more{margin-top:1.25rem}.article-index-content .article-card .read-more a{font-weight:600;font-size:0.9375rem;color:#0ea5e9;text-decoration:none;display:inline-flex;align-items:center;gap:0.35rem;transition:gap 0.2s,color 0.2s}.article-index-content .article-card .read-more a:hover{color:#0284c7;gap:0.5rem}.article-index-content .article-card .read-more a::after{content:'→';font-weight:500}.article-index-content .navigation{margin-top:3rem;padding-top:2.5rem;border-top:1px solid #e2e8f0;display:flex;justify-content:space-between;flex-wrap:wrap;gap:1rem}.article-index-content .navigation a{padding:0.625rem 1.25rem;border-radius:0.5rem;color:#475569;text-decoration:none;font-weight:600;font-size:0.9375rem;transition:background 0.2s,color 0.2s}.article-index-content .navigation a:hover{background:#f1f5f9;color:#0ea5e9}@media (min-width:960px){.article-index-list{max-width:720px;padding-left:2rem;padding-right:2rem}}@media (min-width:1200px){.article-index-list{max-width:820px}}