:root{--paper:#f5f1e7;--d-ink:#15120c;--d-ink-2:#46402f;--red:#c8102e;--rule:#15120c;--hair:rgba(21,18,12,.18);--hair-2:rgba(21,18,12,.35);--didone:var(--font-serif),Georgia,serif;--gothic:var(--font-sans),system-ui,-apple-system,sans-serif;--d-serif:Georgia,"Times New Roman",serif}.proj-wrap{background:var(--paper);background-image:repeating-linear-gradient(0deg,rgba(21,18,12,.012) 0 2px,transparent 2px 4px);min-height:100vh;margin-top:-7px}.proj-inner{max-width:1280px;margin:0 auto;padding:0 clamp(24px,5vw,80px)}.proj-dateline{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;margin-top:18px;font-family:var(--gothic);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--d-ink-2);border-top:3px solid var(--d-ink);border-bottom:1px solid var(--d-ink)}.proj-dateline__mid{text-align:center;flex:1}.proj-hero{display:grid;grid-template-columns:1.4fr 1fr;gap:clamp(32px,4vw,64px);align-items:flex-end;padding:40px 0 36px;border-bottom:3px solid var(--d-ink)}.proj-hero__kicker{font-family:var(--gothic);font-weight:700;font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--red);margin-bottom:14px}.proj-hero__title{font-family:var(--didone);font-weight:900;font-size:clamp(38px,5vw,68px);line-height:.92;letter-spacing:-.025em;color:var(--d-ink);white-space:nowrap}.proj-hero__desc{font-family:var(--d-serif);font-size:clamp(14px,1.4vw,17px);line-height:1.6;color:var(--d-ink-2)}.proj-hero__desc strong{font-weight:700;color:var(--d-ink)}.proj-statsband{display:grid;grid-template-columns:repeat(4,1fr);border-bottom:1px solid var(--hair-2)}.proj-stat{padding:14px 22px;border-left:1px solid var(--hair)}.proj-stat:first-child{border-left:none}.proj-stat__n{font-family:var(--didone);font-weight:700;font-size:clamp(26px,3vw,38px);line-height:.9;color:var(--red)}.proj-stat__l{font-family:var(--gothic);font-size:9px;letter-spacing:.13em;text-transform:uppercase;color:var(--d-ink-2);margin-top:5px}.proj-section-head{padding:44px 0 0}.proj-section-head__kicker{font-family:var(--gothic);font-weight:700;font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--red);margin-bottom:6px}.proj-section-head__row{display:flex;align-items:baseline;justify-content:space-between;gap:20px;padding-bottom:10px;border-bottom:3px solid var(--d-ink)}.proj-section-head__title{font-family:var(--didone);font-weight:900;font-size:clamp(36px,5vw,68px);line-height:.92;letter-spacing:-.02em;color:var(--d-ink)}.proj-section-head__aside{letter-spacing:.2em;white-space:nowrap}.proj-section-head__aside,.proj-section-head__sub{font-family:var(--gothic);font-size:10px;text-transform:uppercase;color:var(--d-ink-2)}.proj-section-head__sub{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--hair-2);letter-spacing:.18em}.proj-feat-strip{display:grid;grid-template-columns:42% 1fr;min-height:420px;border:1px solid var(--hair-2);border-top:none;background:var(--paper);margin-top:20px;transition:background .15s}.proj-feat-strip--link:hover{background:hsla(42,38%,90%,.7)}.proj-feat-img{position:relative;border-right:1px solid var(--hair-2);overflow:hidden}.proj-feat-body{padding:clamp(36px,4.5vw,60px) clamp(32px,4vw,56px);display:flex;flex-direction:column}.proj-feat-meta{display:flex;align-items:center;gap:12px;margin-bottom:20px}.proj-feat-num{font-size:13px;letter-spacing:.1em;color:var(--d-ink-2)}.proj-feat-badge,.proj-feat-num{font-family:var(--gothic);font-weight:700}.proj-feat-badge{display:inline-flex;align-items:center;gap:5px;background:var(--red);color:var(--paper);font-size:10px;letter-spacing:.14em;text-transform:uppercase;padding:4px 10px}.proj-feat-badge:before{content:"●";font-size:7px}.proj-feat-title{font-family:var(--didone);font-weight:700;font-size:clamp(30px,3.5vw,52px);line-height:1;color:var(--red);letter-spacing:-.01em;margin-bottom:22px}.proj-feat-desc{font-family:var(--d-serif);font-size:clamp(13px,1.3vw,16px);line-height:1.55;color:var(--d-ink-2);flex:1}.proj-feat-footer{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-top:32px}.proj-feat-readmore{font-family:var(--gothic);font-weight:700;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--red);white-space:nowrap;flex-shrink:0;text-decoration:none;transition:opacity .15s}.proj-feat-readmore:hover{opacity:.7}.proj-record-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(20px,2.5vw,32px);margin-top:20px}.proj-record-card{min-width:0;display:flex;flex-direction:column;background:var(--paper);border:1px solid var(--hair-2);border-top:3px solid var(--hair-2);transition:border-top-color .22s,background .18s,box-shadow .22s}.proj-record-card:hover{border-top-color:var(--red);background:hsla(43,37%,91%,.85);box-shadow:0 4px 24px rgba(21,18,12,.08)}.proj-record-card:hover .proj-record-num{color:var(--red)}.proj-record-img{-o-object-fit:cover;object-fit:cover;-o-object-position:top;object-position:top;display:block}.proj-record-img,.proj-record-placeholder{width:100%;height:180px;border-bottom:1px solid var(--hair)}.proj-record-placeholder{background:rgba(21,18,12,.04);display:flex;align-items:center;justify-content:center}.proj-record-placeholder span{font-family:var(--gothic);font-size:9px;letter-spacing:.16em;text-transform:uppercase;color:rgba(21,18,12,.2)}.proj-record-content{display:flex;flex-direction:column;flex:1;padding:20px 22px 22px}.proj-record-num{font-family:var(--gothic);font-weight:700;font-size:10px;letter-spacing:.14em;color:var(--d-ink-2);margin-bottom:8px;transition:color .2s}.proj-record-title{font-family:var(--didone);font-weight:700;font-size:clamp(16px,1.4vw,20px);line-height:1.05;color:var(--d-ink);margin-bottom:10px;letter-spacing:-.01em}.proj-record-desc{font-family:var(--d-serif);font-size:12.5px;line-height:1.55;color:var(--d-ink-2);flex:1}.proj-record-footer{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;margin-top:16px;padding-top:14px;border-top:1px solid var(--hair)}.proj-record-readmore{font-family:var(--gothic);font-weight:700;font-size:9px;letter-spacing:.18em;text-transform:uppercase;color:var(--red);white-space:nowrap;flex-shrink:0;text-decoration:none;transition:opacity .15s}.proj-record-readmore:hover{opacity:.7}[data-reveal]{opacity:0;transform:translateY(22px);transition:opacity .6s cubic-bezier(.22,1,.36,1) var(--rd,0s),transform .6s cubic-bezier(.22,1,.36,1) var(--rd,0s)}[data-reveal].revealed{opacity:1;transform:translateY(0)}.proj-feat-strip{transition:background .22s,box-shadow .22s}.proj-feat-strip:hover{background:hsla(44,23%,81%,.95);box-shadow:0 8px 40px rgba(21,18,12,.14)}.proj-feat-strip:hover .proj-feat-num{color:var(--red)}.proj-feat-num{transition:color .22s}.proj-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:12px}.proj-tag{font-family:var(--gothic);font-size:9px;font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--d-ink-2);border:1px solid var(--hair-2);padding:3px 8px}.proj-lang-strip{display:flex;flex-wrap:wrap;gap:8px;padding:20px 0 8px}.proj-lang-chip{font-family:var(--gothic);font-size:10px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--d-ink-2);border:1px solid var(--hair-2);padding:5px 12px;background:var(--paper);transition:background .18s,color .18s,border-color .18s,transform .18s;cursor:default}.proj-lang-chip:hover{background:var(--d-ink);color:var(--paper);border-color:var(--d-ink);transform:translateY(-2px)}.proj-github{display:flex;align-items:stretch;background:var(--d-ink);margin-top:40px;margin-bottom:48px;border:1px solid var(--d-ink);transition:opacity .15s}.proj-github:hover{opacity:.92}.proj-github__text{flex:1;padding:clamp(28px,4vw,52px);display:flex;flex-direction:column;justify-content:center}.proj-github__eyebrow{font-family:var(--gothic);font-weight:700;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:hsla(43,41%,93%,.38);margin-bottom:14px}.proj-github__title{font-family:var(--didone);font-weight:900;font-size:clamp(36px,5vw,72px);line-height:.9;letter-spacing:-.02em;color:var(--paper);margin-bottom:16px}.proj-github__desc{font-family:var(--d-serif);font-size:14px;line-height:1.55;color:hsla(43,41%,93%,.55);max-width:46ch;margin-bottom:24px}.proj-github__btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--gothic);font-weight:700;font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--paper);border:1px solid hsla(43,41%,93%,.3);padding:10px 18px;width:-moz-fit-content;width:fit-content;transition:background .15s,color .15s}.proj-github__btn:hover{background:var(--paper);color:var(--d-ink)}.proj-github__img{width:clamp(280px,32vw,480px);flex-shrink:0;overflow:hidden}.proj-github__img img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center 30%;object-position:center 30%;opacity:.92;border-left:1px solid hsla(43,41%,93%,.08)}@keyframes p-rise{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}@keyframes p-rise-big{0%{opacity:0;transform:translateY(40px);filter:blur(2px)}to{opacity:1;transform:translateY(0);filter:blur(0)}}@keyframes p-fade{0%{opacity:0}to{opacity:1}}.proj-statsband{animation:p-rise .5s ease-out .1s both}.proj-stat:first-child .proj-stat__n{animation:p-fade .32s ease-out .52s both}.proj-stat:nth-child(2) .proj-stat__n{animation:p-fade .32s ease-out .62s both}.proj-stat:nth-child(3) .proj-stat__n{animation:p-fade .32s ease-out .72s both}.proj-stat:nth-child(4) .proj-stat__n{animation:p-fade .32s ease-out .82s both}.proj-section-head{animation:p-rise .45s ease-out .24s both}@media (prefers-reduced-motion:reduce){.proj-feat-strip,.proj-record-card,.proj-section-head,.proj-stat__n,.proj-statsband{animation:none}}@media (max-width:1024px){.proj-record-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:860px){.proj-hero{grid-template-columns:1fr;gap:20px;padding:28px 0 24px}.proj-statsband{grid-template-columns:repeat(2,1fr)}.proj-feat-strip{grid-template-columns:1fr;min-height:auto}.proj-feat-img{position:relative;height:260px}}@media (max-width:600px){.proj-record-grid{grid-template-columns:minmax(0,1fr)}.proj-dateline__mid{display:none}.proj-statsband{grid-template-columns:repeat(2,1fr)}.proj-hero__title{font-size:clamp(34px,9vw,52px);white-space:normal}}