:root{--color-bg-primary:#f7f9fb;--color-bg-secondary:#fff;--color-text-primary:#222;--color-text-secondary:#666;--color-text-tertiary:#999;--color-brand:#1747a6;--color-brand-hover:#0d3180;--color-primary:#4c97ff;--color-success:#2ecc71;--color-warning:#d8b200;--color-error:#e33;--color-border-light:#e3e7ee;--color-border-medium:#dfe2e7;--color-border-dark:#ccc;--color-tag-bg:#e1ecf4;--color-tag-text:#0366d6;--color-badge-bg:#ffb347;--color-badge-text:#222;--color-github:#24292f;--font-family-base:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--font-family-mono:"Consolas","Monaco","Courier New",monospace;--font-size-xs:.65rem;--font-size-sm:.75rem;--font-size-base:.875rem;--font-size-md:1rem;--font-size-lg:1.1rem;--font-size-xl:1.25rem;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-tight:1.2;--line-height-normal:1.5;--line-height-relaxed:1.75;--space-xs:.25rem;--space-sm:.5rem;--space-md:.75rem;--space-lg:1rem;--space-xl:1.5rem;--space-2xl:2rem;--space-3xl:3rem;--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;--shadow-sm:0 1px 3px #00000014;--shadow-md:0 2px 8px #0000001a;--shadow-lg:0 4px 20px #00000026;--transition-fast:.12s ease;--transition-base:.16s ease;--transition-slow:.24s ease;--z-dropdown:100;--z-sticky:100;--z-modal-backdrop:1000;--z-modal:2000;--breakpoint-sm:520px;--breakpoint-md:768px;--breakpoint-lg:960px;--breakpoint-xl:1200px;--buncss-light:initial;--buncss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--buncss-light: ;--buncss-dark:initial;--color-bg-primary:#0f1722;--color-bg-secondary:#182232;--color-text-primary:#e2e8f0;--color-text-secondary:#9ca3af;--color-text-tertiary:#6b7280;--color-brand:#4da3ff;--color-brand-hover:#79bbff;--color-primary:#4c97ff;--color-success:#2ecc71;--color-warning:#ffd54a;--color-error:#f66;--color-border-light:#263244;--color-border-medium:#324156;--color-border-dark:#4a5568;--color-tag-bg:#24364b;--color-tag-text:#8bc3ff;--color-badge-bg:#ffb347;--color-badge-text:#222;--color-github:#1b1f23;--shadow-sm:0 1px 3px #0006;--shadow-md:0 2px 8px #0000004d;--shadow-lg:0 4px 20px #00000080}img,video,svg{filter:none!important}}html{scroll-padding-top:80px}body{font-family:var(--font-family-base);background:var(--color-bg-primary);color:var(--color-text-primary);line-height:var(--line-height-normal);margin:0;padding:0}header{background:var(--color-bg-secondary);padding:var(--space-lg)var(--space-xl);box-shadow:var(--shadow-sm);position:sticky;z-index:var(--z-sticky);display:flex;align-items: center;gap:var(--space-md);top:0}footer{background:var(--color-bg-secondary);padding:var(--space-lg)var(--space-xl);box-shadow:var(--shadow-sm);position:relative;font-size:var(--font-size-sm);text-align:center;color:var(--color-text-secondary)}.footer-links{display:inline-flex;gap:0 var(--space-sm);margin-bottom:var(--space-md);flex-flow:wrap;justify-content:center;align-items: center}.icon{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.icon-fill{fill:currentColor;stroke:none}.site-title{font-size:var(--font-size-xl);display:inline-block;font-weight:var(--font-weight-bold);margin:0}.site-title a{text-decoration:none;color:var(--color-brand);font-weight:inherit;display:inline-flex;align-items: center;gap:var(--space-xs)}.site-logo{display:block;border-radius:4px;flex-shrink:0}@media (max-width:600px){html[lang=en] .site-title{font-size:var(--font-size-base)}}header .top-actions{display:flex;gap:var(--space-sm);position:static;align-items: center;margin-left:auto;transform:none}.lang-switch{position:relative}.lang-btn{display:inline-flex;align-items: center;gap:var(--space-xs);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);background:var(--color-bg-secondary);color:var(--color-text-primary);padding:var(--space-sm)var(--space-md);border:1px solid var(--color-border-medium);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-base);line-height:1}.lang-btn:hover,.lang-btn[aria-expanded=true]{border-color:var(--color-brand);background:var(--color-bg-primary)}.lang-btn .icon{display:block;color:var(--color-brand)}.lang-current{white-space:nowrap}.lang-arrow.icon{color:var(--color-text-secondary);transition:transform var(--transition-base)}.lang-btn[aria-expanded=true] .lang-arrow{transform:rotate(180deg)}.lang-menu{position:absolute;right:0;top:calc(100% + var(--space-xs));background:var(--color-bg-secondary);border:1px solid var(--color-border-medium);border-radius:var(--radius-md);box-shadow:var(--shadow-md);padding:var(--space-xs);z-index:var(--z-dropdown);min-width:160px}.lang-option{display:block;padding:var(--space-sm)var(--space-md);text-align:left;border-radius:var(--radius-sm);cursor:pointer;font-size:var(--font-size-sm);color:var(--color-text-primary);transition:background var(--transition-fast);background:0 0;border:none;width:100%}.lang-option:hover{background:var(--color-bg-primary)}.lang-option-active{background:var(--color-tag-bg);color:var(--color-tag-text);font-weight:var(--font-weight-semibold)}.lang-option-active:hover{background:var(--color-tag-bg)}.lang-divider{background:var(--color-border-light);margin:var(--space-xs)0;height:1px}.lang-remember{display:flex;align-items: center;gap:var(--space-xs);padding:var(--space-sm)var(--space-md);font-size:var(--font-size-sm);cursor:pointer;user-select:none}.lang-remember input[type=checkbox]{cursor:pointer;width:14px;height:14px}.lang-remember-tooltip{display:inline-flex;cursor:help;margin-left:auto}main{margin:var(--space-xl)auto;padding:0 var(--space-lg);max-width:960px}input.search-input{margin:0 var(--space-2xl)var(--space-lg)var(--space-2xl);font-size:var(--font-size-md);width:auto;min-width:200px}.module-list{display:grid;gap:var(--space-lg);grid-template-columns:repeat(auto-fill,minmax(240px,1fr));align-items:stretch}.module-item{background:var(--color-bg-secondary);padding:var(--space-lg)var(--space-lg)var(--space-lg);border-radius:var(--radius-lg);border:1px solid var(--color-border-light);display:flex;position:relative;cursor:pointer;transition:border-color var(--transition-base),box-shadow var(--transition-base);flex-direction:column}.module-item:hover{border-color:var(--color-border-medium);box-shadow:var(--shadow-md)}.module-item p{margin-top:0}.module-item h2 a{color:var(--color-brand);text-decoration:none}.module-item h2 a:after{content:"";position:absolute;inset:0}.module-item:hover h2 a{text-decoration:underline;color:var(--color-brand-hover)}@media (min-width:1200px){main{max-width:1200px}}.module-item h2{margin:0 0 var(--space-sm);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold)}.tags{font-size:var(--font-size-sm)}.print-footer{display:none}.support-section{margin-top:var(--space-lg);display:inline-flex;flex-wrap:wrap;justify-content:center;align-items: center;gap:16px}.support-more{padding:0 var(--space-md);display:inline-flex;border:2px solid var(--color-text-primary);text-decoration:none;color:var(--color-text-primary);border-radius:7px;align-items: center;height:36px;font-size:14px;font-weight:400}.support-more:hover{opacity:.9}@media print{header,body>footer,dialog{display:none!important}main{margin:0;padding:0}body{margin:2px}.print-footer{display:block;margin:var(--space-md)0 0;font-size:11pt}.print-footer p{overflow-wrap:anywhere;font-size:var(--font-size-sm);margin:0 0 .25em}}@supports (-webkit-appearance: none){@media print{*{background:0 0!important}}}.btn{display:inline-flex;justify-content:center;align-items: center;gap:var(--space-xs);padding:var(--space-sm)var(--space-lg);font-size:var(--font-size-base);font-family:var(--font-family-base);font-weight:var(--font-weight-medium);border-radius:var(--radius-md);cursor:pointer;text-decoration:none;transition:all var(--transition-base);white-space:nowrap;border:1px solid #0000;line-height:1}.btn:hover:not(:disabled){opacity:.9}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-brand{background:var(--color-brand);color:#fff;border-color:var(--color-brand)}.btn-brand:hover:not(:disabled){background:var(--color-brand-hover);border-color:var(--color-brand-hover)}.btn-primary{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.btn-primary:hover:not(:disabled){background:#3d8be6;border-color:#3d8be6}.btn-success{background:var(--color-success);color:#fff;border-color:var(--color-success)}.btn-success:hover:not(:disabled){background:#28b463;border-color:#28b463}.btn-danger{background:var(--color-error);color:#fff;border-color:var(--color-error)}.btn-danger:hover:not(:disabled){background:#c0392b;border-color:#c0392b}.btn-outline{color:var(--color-brand);border-color:var(--color-border-medium);background:0 0}.btn-outline:hover:not(:disabled){background:var(--color-bg-secondary);border-color:var(--color-brand)}.btn-ghost{color:var(--color-text-primary);background:0 0;border-color:#0000}.btn-ghost:hover:not(:disabled){background:var(--color-bg-primary)}.btn-sm{padding:var(--space-xs)var(--space-md);font-size:var(--font-size-sm)}.btn-lg{padding:var(--space-md)var(--space-xl);font-size:var(--font-size-lg)}.btn-support-share{height:40px}.btn-kofi{color:#fff;background-color:#ff6433;border-color:#ff6433;height:22px}.btn-kofi-cup{vertical-align:middle;margin-right:4px}.btn-github{color:#fff;background-color:#24292e;border-color:#24292e;height:22px}.badge{display:inline-block;padding:2px var(--space-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);background:var(--color-badge-bg);color:var(--color-badge-text);border-radius:var(--radius-sm);vertical-align:middle;line-height:1.2}.badge-warning{background:var(--color-badge-bg);color:var(--color-badge-text)}.badge-primary{background:var(--color-primary);color:#fff}.badge-success{background:var(--color-success);color:#fff}.badge-error{background:var(--color-error);color:#fff}.tag{display:inline-block;padding:2px var(--space-sm);margin:2px var(--space-xs)2px 0;font-size:var(--font-size-sm);background:var(--color-tag-bg);color:var(--color-tag-text);border-radius:var(--radius-sm);transition:opacity var(--transition-fast)}.tag:hover{opacity:.8}.card{background:var(--color-bg-secondary);border:1px solid var(--color-border-light);border-radius:var(--radius-lg);padding:var(--space-lg);box-shadow:var(--shadow-sm);transition:border-color var(--transition-base),box-shadow var(--transition-base)}.card:hover{border-color:var(--color-border-medium);box-shadow:var(--shadow-md)}.card-header{margin-bottom:var(--space-md);padding-bottom:var(--space-md);border-bottom:1px solid var(--color-border-light)}.card-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0}.card-body{margin:0}.card-footer{margin-top:var(--space-md);padding-top:var(--space-md);border-top:1px solid var(--color-border-light)}.alert{padding:var(--space-md)var(--space-lg);margin-bottom:var(--space-lg);border-radius:var(--radius-md);border:1px solid #0000}.alert-primary{color:#1565c0;background:#e3f2fd;border-color:#90caf9}.alert-success{color:#2e7d32;background:#e8f5e9;border-color:#81c784}.alert-warning{color:#856404;background:#fff3cd;border-color:#ffc107}.alert-error{color:#c62828;background:#ffebee;border-color:#ef5350}@media (prefers-color-scheme:dark){.alert-primary{color:#90caf9;background:#1e3a5f;border-color:#1976d2}.alert-success{color:#81c784;background:#1b5e20;border-color:#388e3c}.alert-warning{color:#ffd54a;background:#3e2723;border-color:#d8b200}.alert-error{color:#f66;background:#4a1a1a;border-color:#e33}}.input{display:block;padding:var(--space-sm)var(--space-md);font-size:var(--font-size-base);font-family:var(--font-family-base);line-height:var(--line-height-normal);color:var(--color-text-primary);background:var(--color-bg-secondary);border:1px solid var(--color-border-light);border-radius:var(--radius-md);transition:border-color var(--transition-base),box-shadow var(--transition-base);width:100%}.input:focus{outline:none;border-color:var(--color-brand);box-shadow:0 0 0 3px #1747a61a}.input:disabled{opacity:.6;cursor:not-allowed}.select-inline{display:inline-block;padding:var(--space-xs)var(--space-sm);font-size:var(--font-size-sm);font-family:var(--font-family-base);line-height:var(--line-height-normal);color:var(--color-text-primary);background:var(--color-bg-secondary);border:1px solid var(--color-border-light);border-radius:var(--radius-md);transition:border-color var(--transition-base),box-shadow var(--transition-base);width:auto}.select-inline:focus{outline:none;border-color:var(--color-brand);box-shadow:0 0 0 3px #1747a61a}.text-primary{color:var(--color-text-primary)}.text-secondary{color:var(--color-text-secondary)}.text-tertiary{color:var(--color-text-tertiary)}.text-brand{color:var(--color-brand)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-error{color:var(--color-error)}.bg-primary{background-color:var(--color-bg-primary)}.bg-secondary{background-color:var(--color-bg-secondary)}.share-dialog{border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);background:var(--color-bg-secondary);color:var(--color-text-primary);padding:var(--space-xl);width:min(480px,calc(100vw - var(--space-3xl)*2));overflow:auto;border:none;max-height:90vh}.share-dialog::backdrop{backdrop-filter:blur(2px);background:#00000080}.share-dialog-header{display:flex;margin-bottom:var(--space-lg);justify-content:space-between;align-items: center}.share-dialog-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0}.share-dialog-close{color:var(--color-text-secondary);padding:var(--space-xs);flex-shrink:0}.share-url-row{display:flex;gap:var(--space-sm);align-items:stretch}.share-url-input{font-family:var(--font-family-mono);font-size:var(--font-size-sm);background:var(--color-bg-primary);white-space:nowrap;flex:1;min-width:0}.share-buttons{margin-top:var(--space-md);display:flex;gap:var(--space-sm);flex-wrap:wrap}.share-buttons .btn{color:#fff;width:34px;height:34px;padding:0}.share-btn-twitter{background-color:#000}.share-btn-twitter:hover{background-color:#333}.share-btn-facebook{background-color:#0866ff}.share-btn-facebook:hover{background-color:#0550cc}.share-btn-reddit{background-color:#ff4500}.share-btn-reddit:hover{background-color:#d93b00}.share-btn-weibo{background-color:#e6162d}.share-btn-weibo:hover{background-color:#c01020}.share-btn-email{background-color:#5c6569}.share-btn-email:hover{background-color:#3c4245}#share-cover-preview{border-radius:var(--radius-md);object-fit:cover;margin-top:var(--space-md);width:100%}#share-native-row{margin-top:var(--space-md)}.share-native-btn{justify-content:center;width:100%}@media (prefers-color-scheme:dark){.share-dialog::backdrop{background:#000000b3}}.issue-banner{padding:var(--space-md)var(--space-lg);margin:var(--space-xs)0;border-radius:var(--radius-sm);font-family:var(--font-family-mono);font-size:var(--font-size-xs);border:1px solid;line-height:1.4}.issue-banner-error{border-color:var(--color-error);color:#c62828;background:#ffebee}.issue-banner-warning{border-color:var(--color-warning);color:#856404;background:#fff3cd}@media (prefers-color-scheme:dark){.issue-banner-error{color:#f66;background:#2a1a1a}.issue-banner-warning{color:#ffd54a;background:#2a2410}}.hint-bar{display:flex;flex-direction:column}.hint-item{display:flex;align-items: center;gap:var(--space-sm);padding:var(--space-sm)var(--space-lg);font-size:var(--font-size-sm);border-bottom:1px solid #0000}.hint-item-text{flex:1}.hint-item-info{color:#1565c0;background:#e8f4fd;border-bottom-color:#b3d9f5}.hint-item-warning{color:#7b5e00;background:#fff8e1;border-bottom-color:#ffe082}.hint-item-action{padding:2px var(--space-sm);font-size:var(--font-size-sm);font-family:var(--font-family-base);font-weight:var(--font-weight-medium);border-radius:var(--radius-sm);cursor:pointer;color:inherit;white-space:nowrap;background:0 0;border:1px solid}.hint-item-action-secondary{opacity:.65}.hint-item-action:hover{opacity:.8}.hint-item-action-secondary:hover{opacity:1}.hint-item-dismiss{cursor:pointer;color:inherit;opacity:.6;padding:var(--space-xs);font-size:1rem;line-height:1;font-family:var(--font-family-base);background:0 0;border:none;flex-shrink:0}.hint-item-dismiss:hover{opacity:1}@media (prefers-color-scheme:dark){.hint-item-info{color:#90caf9;background:#0d2240;border-bottom-color:#1e4d80}.hint-item-warning{color:#ffd54a;background:#2a2000;border-bottom-color:#6b5000}}@media print{.tag{border:1px solid var(--color-tag-text)}.hint-bar{display:none}.badge{border:1px solid;color:var(--color-badge-bg)!important}.badge-warning{color:var(--color-badge-bg)!important}.badge-primary{color:var(--color-primary)!important}.badge-success{color:var(--color-success)!important}.badge-error{color:var(--color-error)!important}}
