.proj-hero{padding-block:clamp(3rem,6vw,5.5rem) clamp(1.5rem,3vw,2.5rem)}.proj-hero-title{font-size:clamp(2.7rem,6.4vw,4.8rem);margin:1rem 0 1.4rem;line-height:1.04;max-width:13ch}.proj-hero-lead{max-width:58ch}.proj-section{padding-top:clamp(2rem,4vw,3rem);border-top:1px solid var(--line)}.proj-hubs{padding-block:clamp(2rem,4vw,3.5rem);border-top:1px solid var(--line)}.proj-hubs-header{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,.55fr);gap:.75rem clamp(1.5rem,4vw,3rem);align-items:end;margin-bottom:1.25rem}.proj-hubs-header .eyebrow{grid-column:1 / -1;margin:0}.proj-hubs-header h2{margin:0;color:var(--ink);font-size:clamp(2rem,4vw,3.1rem);font-weight:600;line-height:1}.proj-hubs-header p:last-child{margin:0;color:var(--ink-soft);font-size:1rem;line-height:1.55}.proj-hub-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--block-gap)}.proj-hub-card{display:flex;flex-direction:column;min-height:12rem;padding:1.25rem;color:inherit;text-decoration:none}.proj-hub-kicker{margin-bottom:1rem;color:var(--accent-ink);font-size:.68rem;letter-spacing:.12em;text-transform:uppercase}.proj-hub-title{color:var(--ink);font-size:1.7rem;font-weight:600;line-height:1.08}.proj-hub-copy{margin-top:auto;padding-top:1.2rem;color:var(--ink-muted);font-size:.94rem;line-height:1.48}.filter-row{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:2rem}.filter-chip{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;padding:.45em .95em;border-radius:var(--radius-pill);border:1px solid var(--line-strong);background:transparent;color:var(--ink-muted);cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.filter-chip:hover{border-color:var(--ink-muted);color:var(--ink)}.filter-chip.on{background:var(--accent);border-color:var(--accent);color:#fbf8f0}.proj-spotlight{display:block;padding:clamp(1.8rem,3.5vw,3rem);text-decoration:none;color:inherit;margin-bottom:2rem}.proj-spotlight-meta{display:flex;align-items:center;gap:.75rem;margin-bottom:.6rem;flex-wrap:wrap}.proj-spotlight-name{font-size:clamp(1.9rem,4vw,2.9rem);font-weight:600;line-height:1.08;margin:0 0 .9rem;letter-spacing:-.01em}.proj-spotlight-blurb{font-size:1.1rem;color:var(--ink-soft);line-height:1.6;margin:0 0 1.4rem;max-width:58ch}.proj-spotlight-types{margin-bottom:1.2rem}.proj-spotlight .post-flag{font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:var(--accent-ink);border:1px solid color-mix(in oklab,var(--accent) 45%,var(--line));padding:.18em .55em;border-radius:var(--radius)}.proj-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--block-gap)}.proj-card{display:flex;flex-direction:column;gap:.6rem;padding:1.4rem;text-decoration:none;color:inherit}.proj-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:.5rem;min-height:1.4rem}.proj-types{display:flex;flex-wrap:wrap;gap:.35rem}.proj-os{font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:var(--accent-ink);border:1px solid color-mix(in oklab,var(--accent) 45%,var(--line));border-radius:var(--radius-pill);padding:.2em .55em;flex-shrink:0;font-family:var(--font-mono)}.proj-name{font-size:1.2rem;font-weight:600;line-height:1.2;margin:.2rem 0 0;transition:color .15s ease}.proj-card:hover .proj-name{color:var(--accent-ink)}.proj-blurb{font-size:.92rem;color:var(--ink-muted);line-height:1.55;margin:0;flex:1}.proj-link{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--font-mono);font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin-top:.3rem;transition:color .15s ease}.proj-link .arrow{transition:transform .18s ease;flex-shrink:0}.proj-card:hover .proj-link{color:var(--accent-ink)}.proj-card:hover .proj-link .arrow{transform:translate(3px)}.proj-empty{color:var(--ink-muted);padding:2rem 0;font-style:italic;grid-column:1 / -1}@media(max-width:900px){.proj-hubs-header{grid-template-columns:1fr}.proj-hub-grid,.proj-grid{grid-template-columns:1fr 1fr}}@media(max-width:560px){.proj-hub-grid,.proj-grid{grid-template-columns:1fr}.footer-nav{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.35rem 1.1rem}}
