*{margin:0;-webkit-tap-highlight-color:transparent}html,body{-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;height:100%}body{overflow-x:hidden;font-size:16px}uni-app,uni-page,uni-page-wrapper,uni-page-body{display:block;box-sizing:border-box;width:100%}uni-page-wrapper{position:relative}#app,uni-app,uni-page,uni-page-wrapper{height:100%}.uni-mask{position:fixed;z-index:999;top:0;right:0;left:0;bottom:0;background:rgba(0,0,0,.5)}.uni-fade-enter-active,.uni-fade-leave-active{transition-duration:.25s;transition-property:opacity;transition-timing-function:ease}.uni-fade-enter-from,.uni-fade-leave-active{opacity:0}.uni-loading,uni-button[loading]:before{background-color:transparent;background-image:url(data:image/svg+xml;base64,\ PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=);background-repeat:no-repeat}.uni-loading{width:20px;height:20px;display:inline-block;vertical-align:middle;animation:uni-loading 1s steps(12,end) infinite;background-size:100%}@keyframes uni-loading{0%{transform:rotate3d(0,0,1,0)}to{transform:rotate3d(0,0,1,360deg)}}html{--primary-color: #007aff;--UI-BG: #fff;--UI-BG-1: #f7f7f7;--UI-BG-2: #fff;--UI-BG-3: #f7f7f7;--UI-BG-4: #4c4c4c;--UI-BG-5: #fff;--UI-FG: #000;--UI-FG-0: rgba(0, 0, 0, .9);--UI-FG-HALF: rgba(0, 0, 0, .9);--UI-FG-1: rgba(0, 0, 0, .5);--UI-FG-2: rgba(0, 0, 0, .3);--UI-FG-3: rgba(0, 0, 0, .1)}uni-page[data-type] uni-page-body{background-color:transparent}body:after{position:fixed;content:"";left:-1000px;top:-1000px;animation:shadow-preload .1s;animation-delay:3s}@keyframes shadow-preload{0%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}to{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}}.uni-async-error{position:absolute;left:0;right:0;top:0;bottom:0;color:#999;padding:100px 10px;text-align:center}.uni-async-loading{box-sizing:border-box;width:100%;padding:50px;text-align:center}.uni-async-loading .uni-loading{width:30px;height:30px}:root{--color-teal-50: #E6F2F0;--color-teal-100: #CCE5E2;--color-teal-300: #5EEAD4;--color-teal-400: #2DD4BF;--color-teal-500: #14B8A6;--color-teal-600: #0F766E;--color-teal-700: #115E59;--color-teal-800: #134E4A;--color-java-400: #F5A623;--color-java-500: #ED8B00;--color-gray-50: #F8F9FB;--color-gray-100: #F2F4F6;--color-gray-200: #E4E7EB;--color-gray-300: #D0D5DB;--color-gray-400: #9CA3AF;--color-gray-500: #6B7280;--color-gray-600: #3D4452;--color-gray-700: #2A2F3A;--color-gray-800: #1F2430;--color-ink-700: #1F2429;--color-ink-800: #181C20;--color-ink-900: #0F1215;--color-paper-0: #FFFFFF;--color-paper-50: #E6EAED;--color-paper-100:#C2C8CE;--color-paper-300:#8B949E;--color-paper-400:#5C646D;--color-success: #059669;--color-success-dark:#34D399;--color-warn: #D97706;--color-warn-dark: #FBBF24;--color-danger: #DC2626;--color-danger-dark: #F87171;--color-info: #2563EB;--color-info-dark: #60A5FA;--font-display: -apple-system, "SF Pro Text", "PingFang SC", "HarmonicOS Sans SC", "MiSans", "Noto Sans SC", "Microsoft YaHei", sans-serif;--font-body: -apple-system, "SF Pro Text", "PingFang SC", "HarmonicOS Sans SC", "MiSans", "Noto Sans SC", "Microsoft YaHei", sans-serif;--font-mono: "JetBrains Mono", "SF Mono", "Cascadia Code", Consolas, "Courier New", monospace;--text-xs: 12px;--text-sm: 13px;--text-base: 15px;--text-lg: 17px;--text-xl: 19px;--text-2xl: 22px;--text-3xl: 26px;--leading-body: 1.6;--leading-tight: 1.25;--leading-code: 1.55;--tracking-display: -.01em;--weight-regular: 400;--weight-medium: 510;--weight-semibold: 590;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-pill: 9999px;--elev-flat: none;--elev-ring: 0 0 0 1px var(--border);--elev-raised: 0 1px 2px rgba(15,23,42,.04), 0 4px 12px rgba(15,23,42,.06);--motion-fast: .15s;--motion-base: .2s;--ease-standard: cubic-bezier(.2, 0, 0, 1);--container-max: 640px;--page-gutter: 16px;--tabbar-height: 56px;--touch-target: 44px;--progress-height: 2px;--icon-xs: 16px;--icon-sm: 20px;--icon-md: 24px;--icon-stroke: 4}:root,:root[data-theme=light]{--bg: var(--color-gray-50);--surface: var(--color-paper-0);--surface-warm: var(--color-gray-100);--fg: var(--color-gray-800);--fg-2: var(--color-gray-600);--muted: var(--color-gray-500);--meta: var(--color-gray-400);--border: var(--color-gray-200);--border-soft: #EFF1F4;--accent: var(--color-teal-600);--accent-hover: var(--color-teal-700);--accent-active: var(--color-teal-800);--accent-on: var(--color-paper-0);--accent-soft: var(--color-teal-50);--success: var(--color-success);--warn: var(--color-warn);--danger: var(--color-danger);--info: var(--color-info);--brand-java: var(--color-java-500)}:root[data-theme=dark]{--bg: var(--color-ink-900);--surface: var(--color-ink-800);--surface-warm: var(--color-ink-700);--fg: var(--color-paper-50);--fg-2: var(--color-paper-100);--muted: var(--color-paper-300);--meta: var(--color-paper-400);--border: rgba(255,255,255,.08);--border-soft: rgba(255,255,255,.05);--accent: var(--color-teal-400);--accent-hover: var(--color-teal-300);--accent-active: #99F6E4;--accent-on: #042F2E;--accent-soft: rgba(45,212,191,.14);--success: var(--color-success-dark);--warn: var(--color-warn-dark);--danger: var(--color-danger-dark);--info: var(--color-info-dark);--brand-java: var(--color-java-400);--elev-ring: 0 0 0 1px var(--border);--elev-raised: 0 0 0 1px var(--border)}:root{--btn-primary-bg: var(--accent);--btn-primary-text: var(--accent-on);--btn-primary-hover-bg: var(--accent-hover);--btn-primary-active-bg: var(--accent-active);--btn-secondary-bg: var(--surface);--btn-secondary-text: var(--accent);--btn-secondary-border: var(--border);--btn-ghost-bg: transparent;--btn-ghost-text: var(--fg);--btn-height: 44px;--btn-radius: var(--radius-md);--btn-padding-x: 20px;--btn-font-weight: var(--weight-medium);--card-bg: var(--surface);--card-border: var(--border);--card-radius: var(--radius-lg);--card-padding: var(--space-4);--input-bg: var(--surface);--input-border: var(--border);--input-focus-border: var(--accent);--input-error-border: var(--danger);--input-radius: var(--radius-md);--input-height: 44px;--input-focus-ring: 0 0 0 3px rgba(15,118,110,.22);--badge-radius: var(--radius-pill);--badge-height: 22px;--badge-font-size: var(--text-xs);--tabbar-bg: var(--surface);--tabbar-border: var(--border);--tabbar-height: 56px;--tabbar-icon-size: var(--icon-sm);--tabbar-icon-size-active: var(--icon-md);--tabbar-active-bg: var(--accent-soft);--tabbar-active-color: var(--accent);--tabbar-inactive-color: var(--muted);--icon-color: currentColor;--icon-color-muted: var(--muted);--icon-color-accent: var(--accent);--progress-height: var(--progress-height);--progress-color: var(--accent);--progress-track: var(--border-soft);--difficulty-easy: var(--success);--difficulty-medium: var(--warn);--difficulty-hard: var(--danger);--focus-ring: 0 0 0 3px rgba(15,118,110,.3)}:root[data-theme=dark]{--input-focus-ring: 0 0 0 3px rgba(45,212,191,.3);--focus-ring: 0 0 0 3px rgba(45,212,191,.35)}:root[data-theme=light]{--code-bg: #F6F8FA;--code-fg: #24292E;--code-border: var(--border);--code-lang-tag-bg: #EDEFF2;--code-lang-tag-fg: var(--muted);--code-copy-btn-fg: var(--muted);--code-radius: 8px;--code-inline-bg: var(--accent-soft);--code-inline-fg: #134E4A}:root[data-theme=dark]{--code-bg: #161B22;--code-fg: #C9D1D9;--code-border: rgba(255,255,255,.08);--code-lang-tag-bg: rgba(255,255,255,.06);--code-lang-tag-fg: #8B949E;--code-copy-btn-fg: #8B949E;--code-radius: 8px;--code-inline-bg: rgba(45,212,191,.14);--code-inline-fg: #2DD4BF}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}uni-page-body{background:var(--bg);color:var(--fg);font-family:var(--font-body);font-size:var(--text-base);line-height:var(--leading-body);-webkit-font-smoothing:antialiased}body{background:var(--bg)}uni-view,uni-text,uni-button,uni-input,uni-textarea,uni-scroll-view{box-sizing:border-box}uni-button:after{border:none}.ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ellipsis-2{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.tabular{font-variant-numeric:tabular-nums}.flex-row{display:flex;flex-direction:row;align-items:center}.flex-1{flex:1;min-width:0}.safe-bottom{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom)}@keyframes jl-skeleton-glow{0%{opacity:1}50%{opacity:.55}to{opacity:1}}.jl-skeleton{background:var(--surface-warm);border-radius:var(--radius-sm);animation:jl-skeleton-glow .8s ease-in-out infinite}.article-content .code-block-head{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;background:var(--code-lang-tag-bg);color:var(--code-lang-tag-fg);font-size:var(--text-xs);font-family:var(--font-mono);border-top-left-radius:var(--code-radius);border-top-right-radius:var(--code-radius)}.article-content .code-block-head .copy-btn{color:var(--code-copy-btn-fg);font-size:var(--text-xs);padding:4px 8px;border-radius:var(--radius-sm);font-family:var(--font-body)}.article-content .code-block-head .copy-btn:active{opacity:.6}.article-content .code-block{border:1px solid var(--code-border);border-radius:var(--code-radius);overflow:hidden;margin:16px 0}.article-content .code-block pre{margin:0;border:none;border-radius:0}.article-content pre{background:var(--code-bg);color:var(--code-fg);border:1px solid var(--code-border);border-radius:var(--code-radius);padding:12px 16px;overflow-x:auto;font-family:var(--font-mono);font-size:13px;line-height:var(--leading-code);-webkit-overflow-scrolling:touch;margin:16px 0}.article-content code{font-family:var(--font-mono)}.article-content :not(pre)>code{background:var(--code-inline-bg);color:var(--code-inline-fg);border-radius:4px;padding:2px 6px;font-size:.92em}:root[data-theme=light] .article-content pre code.hljs,:root:not([data-theme=dark]) .article-content pre code.hljs{color:#24292e;background:transparent}:root[data-theme=light] .article-content pre code.hljs .hljs-comment,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-comment,:root[data-theme=light] .article-content pre code.hljs .hljs-quote,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-quote{color:#6e7781;font-style:italic}:root[data-theme=light] .article-content pre code.hljs .hljs-keyword,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-keyword,:root[data-theme=light] .article-content pre code.hljs .hljs-selector-tag,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-selector-tag,:root[data-theme=light] .article-content pre code.hljs .hljs-literal,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-literal,:root[data-theme=light] .article-content pre code.hljs .hljs-doctag,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-doctag,:root[data-theme=light] .article-content pre code.hljs .hljs-title,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-title,:root[data-theme=light] .article-content pre code.hljs .hljs-section,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-section,:root[data-theme=light] .article-content pre code.hljs .hljs-built_in,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-built_in,:root[data-theme=light] .article-content pre code.hljs .hljs-type,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-type{color:#cf222e}:root[data-theme=light] .article-content pre code.hljs .hljs-string,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-string,:root[data-theme=light] .article-content pre code.hljs .hljs-regexp,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-regexp,:root[data-theme=light] .article-content pre code.hljs .hljs-addition,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-addition{color:#0a3069}:root[data-theme=light] .article-content pre code.hljs .hljs-number,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-number,:root[data-theme=light] .article-content pre code.hljs .hljs-symbol,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-symbol,:root[data-theme=light] .article-content pre code.hljs .hljs-bullet,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-bullet,:root[data-theme=light] .article-content pre code.hljs .hljs-link,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-link{color:#0550ae}:root[data-theme=light] .article-content pre code.hljs .hljs-variable,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-variable,:root[data-theme=light] .article-content pre code.hljs .hljs-template-variable,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-template-variable,:root[data-theme=light] .article-content pre code.hljs .hljs-attribute,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-attribute{color:#953800}:root[data-theme=light] .article-content pre code.hljs .hljs-function .hljs-title,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-function .hljs-title,:root[data-theme=light] .article-content pre code.hljs .hljs-params,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-params{color:#24292e}:root[data-theme=light] .article-content pre code.hljs .hljs-meta,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-meta,:root[data-theme=light] .article-content pre code.hljs .hljs-selector-id,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-selector-id,:root[data-theme=light] .article-content pre code.hljs .hljs-selector-class,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-selector-class{color:#8250df}:root[data-theme=light] .article-content pre code.hljs .hljs-deletion,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-deletion{color:#cf222e;background:#ffebe9}:root[data-theme=light] .article-content pre code.hljs .hljs-emphasis,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-emphasis{font-style:italic}:root[data-theme=light] .article-content pre code.hljs .hljs-strong,:root:not([data-theme=dark]) .article-content pre code.hljs .hljs-strong{font-weight:590}:root[data-theme=dark] .article-content pre code.hljs{color:#c9d1d9;background:transparent}:root[data-theme=dark] .article-content pre code.hljs .hljs-comment,:root[data-theme=dark] .article-content pre code.hljs .hljs-quote{color:#8b949e;font-style:italic}:root[data-theme=dark] .article-content pre code.hljs .hljs-keyword,:root[data-theme=dark] .article-content pre code.hljs .hljs-selector-tag,:root[data-theme=dark] .article-content pre code.hljs .hljs-literal,:root[data-theme=dark] .article-content pre code.hljs .hljs-doctag,:root[data-theme=dark] .article-content pre code.hljs .hljs-title,:root[data-theme=dark] .article-content pre code.hljs .hljs-section,:root[data-theme=dark] .article-content pre code.hljs .hljs-built_in,:root[data-theme=dark] .article-content pre code.hljs .hljs-type{color:#ff7b72}:root[data-theme=dark] .article-content pre code.hljs .hljs-string,:root[data-theme=dark] .article-content pre code.hljs .hljs-regexp,:root[data-theme=dark] .article-content pre code.hljs .hljs-addition{color:#a5d6ff}:root[data-theme=dark] .article-content pre code.hljs .hljs-number,:root[data-theme=dark] .article-content pre code.hljs .hljs-symbol,:root[data-theme=dark] .article-content pre code.hljs .hljs-bullet,:root[data-theme=dark] .article-content pre code.hljs .hljs-link{color:#79c0ff}:root[data-theme=dark] .article-content pre code.hljs .hljs-variable,:root[data-theme=dark] .article-content pre code.hljs .hljs-template-variable,:root[data-theme=dark] .article-content pre code.hljs .hljs-attribute{color:#ffa657}:root[data-theme=dark] .article-content pre code.hljs .hljs-function .hljs-title,:root[data-theme=dark] .article-content pre code.hljs .hljs-params{color:#c9d1d9}:root[data-theme=dark] .article-content pre code.hljs .hljs-meta,:root[data-theme=dark] .article-content pre code.hljs .hljs-selector-id,:root[data-theme=dark] .article-content pre code.hljs .hljs-selector-class{color:#d2a8ff}:root[data-theme=dark] .article-content pre code.hljs .hljs-deletion{color:#ff7b72;background:rgba(255,123,114,.12)}:root[data-theme=dark] .article-content pre code.hljs .hljs-emphasis{font-style:italic}:root[data-theme=dark] .article-content pre code.hljs .hljs-strong{font-weight:590}
