@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-ext-wght-normal.DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-cyrillic-wght-normal.BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-vietnamese-wght-normal.6IgcOCM7.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-ext-wght-normal.DC-KSUi6.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/geist-latin-wght-normal.BgDaEnEv.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--color-paper:oklch(99% .003 260);--color-paper-2:oklch(96.5% .005 260);--color-paper-3:oklch(93% .007 260);--color-elevated:oklch(100% 0 0);--color-ink:oklch(20% .012 260);--color-ink-2:oklch(44% .014 260);--color-ink-3:oklch(58% .012 260);--color-rule:oklch(88% .008 260);--color-rule-strong:oklch(76% .012 260);--color-accent:oklch(55% .19 265);--color-accent-strong:oklch(48% .2 265);--color-accent-soft:oklch(55% .19 265/.1);--color-accent-line:oklch(55% .19 265/.32);--color-accent-tint:oklch(55% .19 265/.05);--color-accent-contrast:oklch(99% .003 260);--color-logo-plate:oklch(98% .003 260);--color-danger:oklch(54% .2 25);--color-success:oklch(52% .14 150);--color-on-ink:oklch(99% .003 260);--color-overlay:oklch(20% .012 260/.08);--color-paper-glass:oklch(99% .003 260/.72);--grad-accent:linear-gradient(135deg, oklch(58% .2 268), oklch(50% .2 262));--grad-hero:radial-gradient(120% 120% at 88% 0%, var(--color-accent-tint), transparent 58%);--grad-plate:linear-gradient(160deg, var(--color-paper-2), var(--color-paper-3));--font-display:"Geist Variable", ui-sans-serif, sans-serif;--font-body:"Geist Variable", ui-sans-serif, sans-serif;--font-mono:"SFMono-Regular", Consolas, "Liberation Mono", monospace;--space-2xs:.25rem;--space-xs:.5rem;--space-sm:.75rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:3rem;--space-3xl:4rem;--space-4xl:6rem;--space-5xl:8.5rem;--text-xs:.75rem;--text-sm:.875rem;--text-md:1rem;--text-lg:1.125rem;--text-xl:1.375rem;--text-2xl:1.75rem;--text-3xl:clamp(2rem, 4vw, 3.25rem);--text-4xl:clamp(2.6rem, 5.4vw, 4.5rem);--text-display:clamp(2.9rem, 7vw, 6rem);--radius-sm:.375rem;--radius-md:.625rem;--radius-lg:1rem;--radius-xl:1.5rem;--radius-pill:999px;--rule-hair:1px;--shadow-nav:0 .75rem 2.5rem -1.25rem var(--color-overlay);--shadow-card:0 1.25rem 2.5rem -1.5rem oklch(20% .012 260/.22);--shadow-lift:0 2rem 4rem -1.75rem oklch(20% .05 265/.35);--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in:cubic-bezier(.7, 0, .84, 0);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--dur-short:.12s;--dur-medium:.22s;--dur-long:.36s}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--color-paper:oklch(16% .014 264);--color-paper-2:oklch(19.5% .016 264);--color-paper-3:oklch(24% .018 264);--color-elevated:oklch(22% .017 264);--color-ink:oklch(96% .005 264);--color-ink-2:oklch(74% .012 264);--color-ink-3:oklch(60% .014 264);--color-rule:oklch(30% .016 264);--color-rule-strong:oklch(42% .02 264);--color-accent:oklch(72% .16 266);--color-accent-strong:oklch(80% .14 266);--color-accent-soft:oklch(72% .16 266/.16);--color-accent-line:oklch(72% .16 266/.42);--color-accent-tint:oklch(72% .16 266/.08);--color-accent-contrast:oklch(16% .014 264);--color-logo-plate:oklch(93% .004 264);--color-danger:oklch(66% .19 25);--color-success:oklch(66% .14 150);--color-on-ink:oklch(15% .014 264);--color-overlay:oklch(0% 0 0/.5);--color-paper-glass:oklch(16% .014 264/.72);--grad-accent:linear-gradient(135deg, oklch(74% .16 268), oklch(66% .17 262));--grad-hero:radial-gradient(120% 120% at 88% 0%, var(--color-accent-tint), transparent 55%);--grad-plate:linear-gradient(160deg, var(--color-paper-2), oklch(17% .015 264));--shadow-card:0 1.25rem 2.5rem -1.5rem oklch(0% 0 0/.6);--shadow-lift:0 2rem 4rem -1.75rem oklch(0% 0 0/.7)}}*,:before,:after{box-sizing:border-box}html,body{min-width:0;margin:0;overflow-x:clip}html{background:var(--color-paper);color:var(--color-ink);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;font-family:var(--font-body);scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){html{--lightningcss-light: ;--lightningcss-dark:initial}}body{text-rendering:optimizelegibility;min-height:100vh;line-height:1.55}main{min-height:70vh;padding-top:var(--space-4xl);display:block}img,svg{max-width:100%;display:block}a{color:inherit;text-decoration-thickness:var(--rule-hair);text-underline-offset:.2em}::selection{background:var(--color-accent-soft);color:var(--color-accent-strong)}.directory-summary,.category-count,.project-meta,.tag-cloud span,.rank-number,.status,.vote-button,.vote-link{font-variant-numeric:tabular-nums}button,input,select,textarea{color:inherit;font:inherit}button,.button{background:var(--color-ink);border:var(--rule-hair) solid var(--color-ink);border-radius:var(--radius-pill);color:var(--color-on-ink);cursor:pointer;font-size:var(--text-sm);align-items:center;gap:var(--space-xs);min-height:2.75rem;padding:var(--space-sm) var(--space-lg);white-space:nowrap;transition:transform var(--dur-short) var(--ease-out), opacity var(--dur-short) var(--ease-out), background-color var(--dur-short) var(--ease-out);justify-content:center;font-weight:650;text-decoration:none;display:inline-flex}button:hover,.button:hover,button.is-hover,.button.is-hover{opacity:.9;transform:translateY(-1px)}button:focus-visible,.button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible,a:focus-visible{outline:3px solid var(--color-accent);outline-offset:3px}button:active,.button:active,button.is-active,.button.is-active{transform:translateY(1px)}button:disabled,.button[aria-disabled=true],button[data-state=loading]{cursor:not-allowed;opacity:.45;pointer-events:none}button[data-state=error]{background:var(--color-danger);border-color:var(--color-danger)}button[data-state=success]{background:var(--color-success);border-color:var(--color-success)}.button.secondary,button.secondary{background:var(--color-paper);border-color:var(--color-rule-strong);color:var(--color-ink)}.shell{width:100%;min-width:0;max-width:82rem;margin-inline:auto;padding-inline:clamp(1rem,4vw,2.5rem)}.nav-pill{background:var(--color-paper);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-pill);box-shadow:var(--shadow-nav);align-items:center;gap:var(--space-lg);inset:var(--space-md) auto auto 50%;max-width:58rem;padding:var(--space-xs) var(--space-xs) var(--space-xs) var(--space-lg);z-index:50;justify-content:space-between;width:calc(100% - 2rem);display:flex;position:fixed;transform:translate(-50%)}.wordmark{align-items:center;gap:var(--space-xs);letter-spacing:-.035em;white-space:nowrap;font-weight:780;text-decoration:none;display:inline-flex}.wordmark-mark{background:var(--color-ink);color:var(--color-on-ink);font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:-.08em;width:1.75rem;height:1.75rem;transition:background-color var(--dur-short) var(--ease-out);border-radius:50%;justify-content:center;align-items:center;display:inline-flex}.wordmark:hover .wordmark-mark{background:var(--color-accent-strong)}.nav-links{align-items:center;gap:var(--space-lg);margin:0 0 0 auto;padding:0;list-style:none;display:flex}.nav-links a:not(.button){color:var(--color-ink-2);font-size:var(--text-sm);transition:color var(--dur-short) var(--ease-out);white-space:nowrap;font-weight:580;text-decoration:none}.nav-links a:not(.button):hover{color:var(--color-ink)}.nav-links a:not(.button)[aria-current=page]{color:var(--color-accent-strong)}@supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){.nav-pill{background:var(--color-paper-glass);-webkit-backdrop-filter:blur(16px)saturate(180%);backdrop-filter:blur(16px)saturate(180%)}}.mobile-nav{margin-left:auto;display:none;position:relative}.mobile-nav summary{cursor:pointer;min-height:2.75rem;padding-inline:var(--space-md);white-space:nowrap;align-items:center;font-weight:650;display:flex}.mobile-nav summary::-webkit-details-marker{display:none}.mobile-nav-panel{background:var(--color-paper);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-md);box-shadow:var(--shadow-nav);gap:var(--space-xs);min-width:12rem;padding:var(--space-sm);right:0;top:calc(100% + var(--space-xs));display:grid;position:absolute}.mobile-nav-panel a{min-height:2.75rem;padding:var(--space-sm);white-space:nowrap;text-decoration:none}.page-head{align-items:end;gap:var(--space-2xl);padding-block:var(--space-3xl) var(--space-2xl);grid-template-columns:minmax(0,1.2fr) minmax(0,.8fr);display:grid}.page-head h1,.display-title{font-family:var(--font-display);font-size:var(--text-3xl);letter-spacing:-.045em;overflow-wrap:anywhere;min-width:0;margin:0;line-height:1.02}.page-head p{color:var(--color-ink-2);font-size:var(--text-lg);max-width:60ch;margin:0}.directory-summary{color:var(--color-ink-3);font-family:var(--font-mono);font-size:var(--text-xs);align-items:center;gap:var(--space-sm);letter-spacing:.04em;margin:0 0 var(--space-md);text-transform:uppercase;display:flex}.directory-summary:before{background:var(--color-accent);block-size:var(--rule-hair);content:"";flex:none;inline-size:1.75rem}.search-band{background:var(--color-paper-2);border-block:var(--rule-hair) solid var(--color-rule);padding-block:var(--space-lg)}.search-form{align-items:end;gap:var(--space-sm);grid-template-columns:minmax(0,1fr) minmax(10rem,.28fr) auto;display:grid}.search-form-wide{grid-template-columns:minmax(0,1fr) minmax(10rem,.28fr) minmax(8rem,.2fr) auto}.search-form-filters{grid-template-columns:minmax(12rem,1fr) repeat(4,minmax(8rem,.34fr)) auto}.field{gap:var(--space-xs);min-width:0;display:grid}.field label,.field-label{font-size:var(--text-sm);font-weight:650}input,select,textarea{background:var(--color-paper);border:var(--rule-hair) solid var(--color-rule-strong);border-radius:var(--radius-md);min-height:2.875rem;padding:var(--space-sm) var(--space-md);transition:border-color var(--dur-short) var(--ease-out);width:100%}textarea{resize:vertical;min-height:10rem}input:hover,select:hover,textarea:hover{border-color:var(--color-ink-3)}input:disabled,select:disabled,textarea:disabled{background:var(--color-paper-3);color:var(--color-ink-3);cursor:not-allowed}input:invalid:not(:placeholder-shown),textarea:invalid:not(:placeholder-shown){border-color:var(--color-danger)}input:valid:not(:placeholder-shown),textarea:valid:not(:placeholder-shown){border-color:var(--color-success)}.section-band{padding-block:var(--space-3xl)}.section-band+.section-band{border-top:var(--rule-hair) solid var(--color-rule)}.section-head{align-items:baseline;gap:var(--space-lg);margin-bottom:var(--space-xl);justify-content:space-between;display:flex}.section-head h2{font-size:var(--text-2xl);letter-spacing:-.035em;overflow-wrap:anywhere;min-width:0;margin:0}.section-head a{color:var(--color-ink-2);font-size:var(--text-sm);transition:color var(--dur-short) var(--ease-out);white-space:nowrap;font-weight:650;text-decoration:none}.section-head a:hover{color:var(--color-accent-strong)}.category-grid{gap:var(--rule-hair);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.category-link{background:var(--grad-plate);box-shadow:inset 0 0 0 0 var(--color-accent);gap:var(--space-lg);min-height:10rem;padding:var(--space-lg);transition:background-color var(--dur-medium) var(--ease-out), box-shadow var(--dur-medium) var(--ease-out);text-decoration:none;display:grid}.category-link:hover{background:var(--color-accent-tint);box-shadow:inset 3px 0 0 0 var(--color-accent)}.category-link strong{font-size:var(--text-xl);letter-spacing:-.025em;transition:color var(--dur-short) var(--ease-out)}.category-link:hover strong{color:var(--color-accent-strong)}.category-link span{color:var(--color-ink-2);font-size:var(--text-sm)}.category-count{color:var(--color-ink-3);font-family:var(--font-mono);font-size:var(--text-xs);align-self:end}.tag-cloud{gap:var(--space-sm);flex-wrap:wrap;display:flex}.tag-cloud a,.tag-list a{background:var(--color-paper-2);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-pill);font-size:var(--text-sm);align-items:center;gap:var(--space-sm);padding:var(--space-xs) var(--space-md);transition:background-color var(--dur-short) var(--ease-out), border-color var(--dur-short) var(--ease-out);text-decoration:none;display:inline-flex}.tag-cloud a:hover,.tag-list a:hover{background:var(--color-accent-soft);border-color:var(--color-accent-line)}.tag-cloud span{color:var(--color-ink-3);font-family:var(--font-mono);font-size:var(--text-xs)}.project-grid{gap:var(--space-xl) var(--space-lg);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.project-card{gap:var(--space-sm);min-width:0;display:grid;position:relative}.project-card-media{aspect-ratio:4/3;background:var(--color-logo-plate);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-md);padding:var(--space-lg);transition:border-color var(--dur-medium) var(--ease-out), box-shadow var(--dur-medium) var(--ease-out), transform var(--dur-medium) var(--ease-out);justify-content:center;align-items:center;text-decoration:none;display:flex;overflow:hidden}.project-card-media img{object-fit:contain;max-width:62%;height:auto;max-height:44%;transition:transform var(--dur-medium) var(--ease-out);width:auto}.project-card:hover .project-card-media{border-color:var(--color-rule-strong);box-shadow:var(--shadow-card);transform:translateY(-2px)}.project-card-media:hover img{transform:scale(1.03)}.project-initials{font-family:var(--font-display);font-size:var(--text-3xl);letter-spacing:-.06em;font-weight:780}.project-card-title-row{align-items:baseline;gap:var(--space-sm);justify-content:space-between;display:flex}.project-card h3{font-size:var(--text-md);min-width:0;margin:0}.project-card h3 a{transition:color var(--dur-short) var(--ease-out);text-decoration:none}.project-card h3 a:hover{color:var(--color-accent-strong)}.project-card p{color:var(--color-ink-2);font-size:var(--text-sm);margin:0}.project-meta{color:var(--color-ink-3);font-family:var(--font-mono);font-size:var(--text-xs);align-items:center;gap:var(--space-xs);flex-wrap:wrap;display:flex}.vote-form{margin:0}.vote-button,.vote-link{background:var(--color-paper);border-color:var(--color-rule-strong);color:var(--color-ink);font-family:var(--font-mono);font-size:var(--text-xs);min-width:3.25rem;min-height:2.25rem;padding:var(--space-xs) var(--space-sm)}.vote-button[aria-pressed=true]{background:var(--color-ink);border-color:var(--color-ink);color:var(--color-on-ink)}.notice{background:var(--color-paper-2);border-left:3px solid var(--color-ink);margin-bottom:var(--space-lg);padding:var(--space-md)}.notice.error{border-color:var(--color-danger)}.form-card,.content-card{border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-lg);max-width:44rem;margin-inline:auto;padding:clamp(1.25rem,5vw,3rem)}.form-card-wide{max-width:68rem}.form-stack{gap:var(--space-lg);display:grid}.form-grid-two{gap:var(--space-lg);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.form-note{color:var(--color-ink-2);font-size:var(--text-sm)}.fieldset-reset{border:0;margin:0;padding:0}.tag-checkbox-grid{gap:var(--space-sm);flex-wrap:wrap;display:flex}.check-chip{cursor:pointer;position:relative}.check-chip input{opacity:0;width:1px;height:1px;position:absolute}.check-chip span{background:var(--color-paper);border:var(--rule-hair) solid var(--color-rule-strong);border-radius:var(--radius-pill);font-size:var(--text-sm);padding:var(--space-xs) var(--space-md);display:inline-flex}.check-chip input:checked+span{background:var(--color-ink);border-color:var(--color-ink);color:var(--color-on-ink)}.check-chip input:focus-visible+span{outline:3px solid var(--color-accent);outline-offset:3px}.honeypot{position:absolute;left:-9999px}.empty-state{border:var(--rule-hair) dashed var(--color-rule-strong);color:var(--color-ink-2);padding:var(--space-2xl);text-align:center}.project-detail{gap:var(--space-3xl);padding-block:var(--space-3xl);grid-template-columns:minmax(0,1fr) minmax(15rem,.34fr);display:grid}.project-main{min-width:0}.breadcrumbs{color:var(--color-ink-3);font-size:var(--text-xs);align-items:center;gap:var(--space-xs);margin-bottom:var(--space-xl);flex-wrap:wrap;display:flex}.project-title-lockup{align-items:center;gap:var(--space-lg);margin-bottom:var(--space-lg);display:flex}.project-title-lockup h1{margin:0}.project-logo{background:var(--color-logo-plate);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-lg);object-fit:contain;height:5rem;padding:var(--space-sm);flex:none;width:5rem}.project-detail h1{font-size:var(--text-display);letter-spacing:-.06em;margin:0 0 var(--space-lg);overflow-wrap:anywhere;min-width:0;line-height:.95}.project-detail-lede{color:var(--color-ink-2);font-size:var(--text-xl);margin:0 0 var(--space-2xl)}.tag-list{gap:var(--space-xs);margin-bottom:var(--space-2xl);flex-wrap:wrap;display:flex}.project-screenshot{margin:0 0 var(--space-2xl)}.project-screenshot img{aspect-ratio:16/9;background:var(--color-paper-2);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-lg);object-fit:contain;width:100%}.project-screenshot figcaption{color:var(--color-ink-3);font-size:var(--text-xs);padding-top:var(--space-xs)}.project-description{font-size:var(--text-lg);white-space:pre-line;max-width:65ch}.detail-section{border-top:var(--rule-hair) solid var(--color-rule);margin-top:var(--space-3xl);padding-top:var(--space-2xl)}.detail-section h2{font-size:var(--text-2xl);letter-spacing:-.035em;margin:0 0 var(--space-xl)}.feature-grid{gap:var(--space-sm);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;padding:0;list-style:none;display:grid}.feature-grid li{background:var(--color-paper-2);border-radius:var(--radius-md);padding:var(--space-md)}.pros-cons{gap:var(--space-lg);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.pros-cons>div{border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-md);padding:var(--space-lg)}.pros-cons h3{margin-top:0}.pros-cons ul,.comparison-table ul{padding-left:var(--space-lg)}.faq-list{border-top:var(--rule-hair) solid var(--color-rule)}.faq-list details{border-bottom:var(--rule-hair) solid var(--color-rule);padding-block:var(--space-md)}.faq-list summary{cursor:pointer;font-weight:650}.faq-list p{color:var(--color-ink-2);margin-bottom:0}.project-aside{background:var(--color-paper-2);border-radius:var(--radius-md);align-self:start;gap:var(--space-lg);padding:var(--space-lg);display:grid}.project-aside dl{gap:var(--space-md);margin:0;display:grid}.project-aside dt{color:var(--color-ink-3);font-size:var(--text-xs);text-transform:uppercase;font-weight:650}.project-aside dd{margin:var(--space-2xs) 0 0}.project-aside dd small{color:var(--color-ink-2);font-size:var(--text-xs);margin-top:var(--space-xs);display:block}.action-pair{gap:var(--space-sm);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.action-pair form,.action-pair button,.compact-action{width:100%;margin:0}.rating-summary{border-block:var(--rule-hair) solid var(--color-rule);padding-block:var(--space-md);justify-content:space-between;align-items:baseline;margin:0;display:flex}.rating-summary span{color:var(--color-ink-3);font-size:var(--text-xs)}.reviews-layout{gap:var(--space-2xl);grid-template-columns:minmax(0,1fr) minmax(18rem,.42fr);display:grid}.review-list{gap:var(--space-md);display:grid}.review-card{border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-md);padding:var(--space-lg)}.review-card>div{align-items:baseline;gap:var(--space-sm);justify-content:space-between;display:flex}.review-card span{color:var(--color-ink-3);font-size:var(--text-xs)}.review-card p{margin-bottom:0}.review-form-card{background:var(--color-paper-2);border-radius:var(--radius-md);padding:var(--space-lg);align-self:start}.badge-section{align-items:start;gap:var(--space-3xl);grid-template-columns:minmax(0,1fr) minmax(20rem,.7fr);display:grid}.badge-section h2{font-size:var(--text-2xl);margin:0}.badge-section>div:last-child{gap:var(--space-sm);display:grid}.embed-code{font-family:var(--font-mono);font-size:var(--text-xs);min-height:7rem}.comparison-scroll{overflow-x:auto}.comparison-table{border-collapse:collapse;width:100%;min-width:52rem}.comparison-table th,.comparison-table td{border-bottom:var(--rule-hair) solid var(--color-rule);padding:var(--space-md);text-align:left;vertical-align:top}.comparison-table thead th{color:var(--color-ink-3);font-size:var(--text-xs);text-transform:uppercase}.comparison-table tbody th{font-weight:650}.comparison-source{background:var(--color-paper-2)}.comparison-table-wide td,.comparison-table-wide th{width:33.333%}.decision-grid{gap:var(--space-lg);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.decision-grid article{background:var(--color-paper-2);border-radius:var(--radius-lg);padding:var(--space-xl)}.decision-grid h2{font-size:var(--text-xl)}.facet-tabs{gap:var(--space-xs);display:flex}.facet-tabs a{border:var(--rule-hair) solid var(--color-rule-strong);border-radius:var(--radius-pill);font-size:var(--text-sm);padding:var(--space-xs) var(--space-md);text-decoration:none}.facet-tabs a.active{background:var(--color-ink);color:var(--color-on-ink)}.ranking-list{gap:var(--space-xl);margin:0;padding:0;list-style:none;display:grid}.ranking-list>li{border-bottom:var(--rule-hair) solid var(--color-rule);align-items:start;gap:var(--space-lg);padding-bottom:var(--space-xl);grid-template-columns:2.5rem minmax(0,1fr);display:grid}.rank-number{color:var(--color-ink-3);font-family:var(--font-mono);padding-top:var(--space-sm)}.ranking-list .project-card{grid-template-columns:minmax(9rem,.3fr) minmax(0,1fr)}.ranking-list .project-card-media{grid-row:1/span 3}.account-list{border-top:var(--rule-hair) solid var(--color-rule)}.account-row{border-bottom:var(--rule-hair) solid var(--color-rule);align-items:center;gap:var(--space-lg);padding-block:var(--space-lg);grid-template-columns:minmax(0,1fr) auto auto;display:grid}.status{border:var(--rule-hair) solid var(--color-rule-strong);border-radius:var(--radius-pill);font-family:var(--font-mono);font-size:var(--text-xs);padding:var(--space-2xs) var(--space-sm);white-space:nowrap}.account-actions{margin-top:var(--space-2xl)}.site-footer{margin-top:var(--space-4xl);padding-bottom:var(--space-xl)}.footer-line{border-top:var(--rule-hair) solid var(--color-rule);color:var(--color-ink-2);font-size:var(--text-xs);align-items:center;gap:var(--space-md);padding-top:var(--space-lg);justify-content:space-between;display:flex}.footer-links{gap:var(--space-md);flex-wrap:wrap;display:flex}.footer-links a{white-space:nowrap}@media (width<=64rem){.project-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.category-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.nav-links{display:none}.mobile-nav{display:block}.nav-pill{width:auto;max-width:calc(100% - 2rem)}.search-form-filters{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width<=48rem){.nav-pill{padding-left:var(--space-sm)}.page-head,.project-detail,.reviews-layout,.badge-section{grid-template-columns:minmax(0,1fr)}.page-head{align-items:start;gap:var(--space-lg)}.search-form{grid-template-columns:minmax(0,1fr);align-items:stretch}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.section-head{flex-direction:column;align-items:start}.account-row{grid-template-columns:minmax(0,1fr);align-items:start}.form-grid-two,.feature-grid,.pros-cons,.decision-grid,.ranking-list .project-card{grid-template-columns:minmax(0,1fr)}.ranking-list .project-card-media{grid-row:auto}}@media (width<=32rem){main{padding-top:var(--space-3xl)}.wordmark-name{display:none}.project-grid,.category-grid{grid-template-columns:minmax(0,1fr)}.project-card-media{aspect-ratio:16/9}.footer-line,.footer-links{flex-direction:column;align-items:flex-start}}@media (prefers-reduced-motion:no-preference){@supports (animation-timeline:view()){.section-band{animation:linear both reveal-up;animation-timeline:view();animation-range:entry 5% cover 22%}}@keyframes reveal-up{0%{opacity:0;transform:translateY(1.25rem)}to{opacity:1;transform:translateY(0)}}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition-duration:1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important}}.eyebrow{color:var(--color-accent-strong);font-family:var(--font-mono);font-size:var(--text-xs);align-items:center;gap:var(--space-sm);letter-spacing:.16em;margin:0 0 var(--space-lg);text-transform:uppercase;font-weight:600;display:inline-flex}.eyebrow:before{background:var(--color-accent);block-size:var(--rule-hair);content:"";flex:none;inline-size:1.75rem}.cta-primary,button.cta-primary{background:var(--grad-accent);color:var(--color-accent-contrast);border-color:#0000}.cta-primary:hover{box-shadow:var(--shadow-lift);opacity:1;transform:translateY(-1px)}.home-hero{background:var(--grad-hero);border-bottom:var(--rule-hair) solid var(--color-rule);overflow:clip}.home-hero-inner{align-items:center;gap:clamp(var(--space-2xl), 5vw, var(--space-4xl));padding-block:clamp(var(--space-2xl), 6vw, var(--space-4xl)) var(--space-4xl);grid-template-columns:minmax(0,1.08fr) minmax(0,.92fr);display:grid}.home-hero-copy{min-width:0}.home-hero-title{font-family:var(--font-display);font-size:var(--text-4xl);letter-spacing:-.05em;margin:0;font-weight:780;line-height:.98}.home-hero-lede{color:var(--color-ink-2);font-size:var(--text-lg);margin:var(--space-lg) 0 var(--space-xl);max-width:44ch}.home-hero-cta{gap:var(--space-sm);flex-wrap:wrap;display:flex}.index-panel{background:var(--color-elevated);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);gap:var(--space-md);min-width:0;padding:var(--space-lg);display:grid}.index-panel-head{color:var(--color-ink-3);font-family:var(--font-mono);font-size:var(--text-xs);letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;align-items:center;display:flex}.index-panel-head a{color:var(--color-accent-strong);transition:opacity var(--dur-short) var(--ease-out);text-decoration:none}.index-panel-head a:hover{opacity:.75}.index-panel-list{gap:var(--space-2xs);margin:0;padding:0;list-style:none;display:grid}.index-panel-list li{border-radius:var(--radius-sm);align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-xs);transition:background-color var(--dur-short) var(--ease-out);grid-template-columns:1.5rem minmax(0,1fr) auto auto;display:grid}.index-panel-list li:hover{background:var(--color-accent-tint)}.index-rank{color:var(--color-ink-3);font-family:var(--font-mono);font-size:var(--text-xs)}.index-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-weight:620;text-decoration:none;overflow:hidden}.index-name:hover{color:var(--color-accent-strong)}.index-cat{color:var(--color-ink-3);font-size:var(--text-xs);text-overflow:ellipsis;white-space:nowrap;max-width:8rem;overflow:hidden}.index-votes{color:var(--color-ink-2);font-family:var(--font-mono);font-size:var(--text-xs);font-variant-numeric:tabular-nums}.index-panel-stats{border-top:var(--rule-hair) solid var(--color-rule);gap:var(--space-md);padding-top:var(--space-md);grid-template-columns:repeat(3,minmax(0,1fr));margin:0;display:grid}.index-panel-stats dt{color:var(--color-ink-3);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;font-size:.6875rem}.index-panel-stats dd{font-family:var(--font-display);font-size:var(--text-xl);font-variant-numeric:tabular-nums;letter-spacing:-.03em;margin:var(--space-2xs) 0 0;font-weight:720}.index-feed{gap:var(--rule-hair);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;padding:0;list-style:none;display:grid}.feed-row{background:var(--color-paper);border-radius:var(--radius-md);align-items:center;gap:var(--space-md);padding:var(--space-md);transition:background-color var(--dur-short) var(--ease-out);grid-template-columns:3rem minmax(0,1fr) auto;display:grid}.feed-row:hover{background:var(--color-paper-2)}.feed-logo{background:var(--color-logo-plate);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-sm);flex:none;justify-content:center;align-items:center;width:3rem;height:3rem;text-decoration:none;display:flex;overflow:hidden}.feed-logo img{object-fit:contain;width:auto;max-width:58%;height:auto;max-height:58%}.feed-logo span{color:var(--color-ink-2);font-family:var(--font-display);font-size:var(--text-sm);letter-spacing:-.04em;font-weight:720}.feed-main{min-width:0}.feed-name{font-size:var(--text-md);transition:color var(--dur-short) var(--ease-out);font-weight:620;text-decoration:none}.feed-name:hover{color:var(--color-accent-strong)}.feed-main p{color:var(--color-ink-2);font-size:var(--text-sm);margin:var(--space-2xs) 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.feed-meta{color:var(--color-ink-3);font-family:var(--font-mono);font-size:var(--text-xs);text-align:right;white-space:nowrap;justify-self:end}@media (width<=60rem){.home-hero-inner{gap:var(--space-2xl);padding-block:var(--space-3xl);grid-template-columns:minmax(0,1fr)}.index-feed{grid-template-columns:minmax(0,1fr)}}@media (width<=30rem){.index-cat{display:none}.feed-row{grid-template-columns:2.5rem minmax(0,1fr)}.feed-meta{display:none}}@media (prefers-reduced-motion:no-preference){.home-hero-copy>*,.index-panel{animation:hero-in .7s var(--ease-out) both}.home-hero-title{animation-delay:40ms}.home-hero-lede{animation-delay:.1s}.home-hero-cta{animation-delay:.16s}.index-panel{animation-delay:.14s}@keyframes hero-in{0%{opacity:0;transform:translateY(1.25rem)}to{opacity:1;transform:translateY(0)}}}
