:root{--paper:#faf8f4;--paper-sunk:#f1ede5;--ink:#211d19;--ink-soft:#5c554c;--ink-faint:#8b8378;--rule:#ddd6c9;--route:#1a6ee0;--serif:"Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;--sans:ui-sans-serif, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--measure:34rem;--wide:62rem;--gutter:clamp(1.25rem, 5vw, 3rem)}@media (prefers-color-scheme:dark){:root{--paper:#16140f;--paper-sunk:#1f1c16;--ink:#ece6da;--ink-soft:#b3aa9a;--ink-faint:#8b8272;--rule:#353026;--route:#6da6f5}.person__mark,.entry__cover{filter:brightness(.94)}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font-family:var(--serif);text-rendering:optimizelegibility;margin:0;font-size:clamp(1.05rem,.98rem + .3vw,1.18rem);line-height:1.65}img{max-width:100%;height:auto;display:block}a{color:inherit}:focus-visible{outline:2px solid var(--route);outline-offset:3px;border-radius:2px}.masthead{padding:1.1rem var(--gutter);border-bottom:1px solid var(--rule);font-family:var(--sans);letter-spacing:.09em;text-transform:uppercase;color:var(--ink-soft);justify-content:space-between;align-items:baseline;gap:1rem;font-size:.78rem;display:flex}.masthead a{text-decoration:none}.masthead a:hover{color:var(--route)}.masthead__title{color:var(--ink);font-weight:600}.site-foot{padding:2rem var(--gutter) 3rem;border-top:1px solid var(--rule);font-family:var(--sans);color:var(--ink-faint);text-align:center;margin-top:5rem;font-size:.8rem}.site-foot p{margin:0 0 .4rem}.site-foot p:last-child{margin-bottom:0}.site-foot__up{color:var(--ink-faint);text-decoration:none}.site-foot__up:hover{color:var(--route)}.hero{max-width:40rem;padding:clamp(3rem, 9vw, 6rem) var(--gutter) clamp(2rem, 5vw, 3rem);text-align:center;margin-inline:auto}.hero__kicker{font-family:var(--sans);letter-spacing:.22em;text-transform:uppercase;color:var(--route);margin:0 0 1.1rem;font-size:.75rem;font-weight:600}.hero h1{letter-spacing:-.025em;text-wrap:balance;margin:0;font-size:clamp(2.4rem,1.5rem + 4vw,4.2rem);font-weight:600;line-height:1.05}.hero p{color:var(--ink-soft);text-wrap:pretty;margin:1.5rem 0 0}.contents{max-width:var(--wide);padding-inline:var(--gutter);margin:clamp(2rem,5vw,3.5rem) auto 0}.contents__part{border-bottom:1px solid var(--rule);font-family:var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--ink-faint);margin:2.75rem 0 1.25rem;padding-bottom:.6rem;font-size:.74rem;font-weight:700}.people{grid-template-columns:repeat(auto-fill,minmax(16rem,1fr));gap:1.75rem;margin:0;padding:0;list-style:none;display:grid}.person{align-items:flex-start;gap:1.1rem;text-decoration:none;display:flex}.person__mark{aspect-ratio:1;border:1px solid var(--rule);background:var(--paper-sunk);font-family:var(--serif);color:var(--ink-soft);border-radius:.6rem;flex:0 0 3.6rem;place-items:center;font-size:1.6rem;font-weight:600;transition:color .25s,border-color .25s;display:grid}.person:hover .person__mark{color:var(--route);border-color:var(--route)}.person__body{min-width:0}.person__kicker{font-family:var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--route);margin-bottom:.3rem;font-size:.68rem;font-weight:600;display:block}.person__name{text-wrap:balance;margin:0 0 .35rem;font-size:1.08rem;font-weight:600;line-height:1.25}.person:hover .person__name{color:var(--route)}.person__blurb{color:var(--ink-soft);text-wrap:pretty;margin:0;font-size:.92em}.person__go{font-family:var(--sans);color:var(--ink-faint);margin:.6rem 0 0;font-size:.74rem}.person:hover .person__go{color:var(--route)}.entries{gap:clamp(2rem,5vw,3rem);margin:0;padding:0;list-style:none;display:grid}.entry{text-decoration:none;display:block}.entry__kicker{font-family:var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--route);margin-bottom:.5rem;font-size:.7rem;font-weight:600;display:block}.entry__badge{border:1px solid var(--rule);letter-spacing:.12em;vertical-align:.05em;color:var(--ink-faint);border-radius:1rem;margin-left:.6rem;padding:.08rem .5rem;font-size:.62rem;font-weight:600;display:inline-block}.entry__title{letter-spacing:-.02em;text-wrap:balance;margin:0 0 .5rem;font-size:clamp(1.6rem,1.2rem + 1.4vw,2.1rem);font-weight:600;line-height:1.1}.entry:hover .entry__title{color:var(--route)}.entry__meta{font-family:var(--sans);color:var(--ink-faint);margin:0 0 1rem;font-size:.78rem}.entry__blurb{color:var(--ink-soft);text-wrap:pretty;margin:0}.entry__foot{font-family:var(--sans);flex-wrap:wrap;align-items:baseline;gap:.5rem 1rem;margin:1.25rem 0 0;font-size:.78rem;display:flex}.entry__note{color:var(--ink-faint)}.entry__go{color:var(--route);font-weight:600}.entry:hover .entry__go{text-underline-offset:.25em;text-decoration:underline}.prose{max-width:var(--measure);padding-inline:var(--gutter);margin:clamp(2.5rem,6vw,4rem) auto 0}.prose>p{text-wrap:pretty;margin:0 0 1.35em}.prose h2{border-bottom:1px solid var(--rule);font-family:var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--ink-faint);margin:3rem 0 1.1rem;padding-bottom:.6rem;font-size:.76rem;font-weight:700}@media (prefers-reduced-motion:reduce){*{transition:none!important}}body.celebrate{--paper:#0b0714;--paper-sunk:#150d24;--ink:#fff6e6;--ink-soft:#d9c9b4;--ink-faint:#a294b4;--rule:#2e2140;--route:#ffc857;--gold:linear-gradient(100deg, #ffe9a8 0%, #ffc857 26%, #ff9f45 44%, #fff3cd 58%, #ffc857 78%, #ffe9a8 100%);overflow-x:hidden}body.celebrate .site-foot{margin-top:0}.sky{z-index:-1;background:radial-gradient(120% 80% at 50% 0%, #221541 0%, transparent 60%), radial-gradient(90% 70% at 12% 100%, #2a1033 0%, transparent 62%), radial-gradient(90% 70% at 88% 92%, #10203f 0%, transparent 60%), var(--paper);position:fixed;inset:0;overflow:hidden}.sky__blob{filter:blur(72px);opacity:.5;border-radius:50%;animation:28s ease-in-out infinite alternate drift;position:absolute}.sky__blob--a{background:#7b3fa0;width:48vw;height:48vw;inset:-12% auto auto -10%}.sky__blob--b{background:#b8562f;width:54vw;height:54vw;animation-duration:34s;animation-direction:alternate-reverse;inset:auto -14% -18% auto}.sky__blob--c{background:#2f6fb8;width:34vw;height:34vw;animation-duration:41s;inset:22% 30% auto auto}.star{background:#fff6e6;border-radius:50%;animation:4s ease-in-out infinite twinkle;position:absolute}.confetti{z-index:0;pointer-events:none;position:fixed;inset:0;overflow:hidden}.confetti__piece{animation:linear infinite fall;position:absolute}.confetti__piece--round{border-radius:50%}.confetti__piece--ribbon{border-radius:1px}.stage{z-index:1;min-height:calc(100svh - 3.6rem);padding:clamp(2rem, 6vw, 4rem) var(--gutter) clamp(3rem, 8vw, 5rem);text-align:center;isolation:isolate;place-content:center;justify-items:center;gap:0;display:grid;position:relative;overflow:hidden}.stage__mark{z-index:-1;letter-spacing:-.04em;background:var(--gold);color:#0000;opacity:.13;user-select:none;-webkit-background-clip:text;background-clip:text;margin:0;font-size:min(58vh,46vw);font-weight:700;line-height:.8;position:absolute;inset:50% auto auto 50%;translate:-50% -50%}.flourish{width:min(22rem,70vw);color:var(--route);align-items:center;gap:.9rem;margin:0 0 clamp(1.5rem,4vw,2.5rem);font-size:.72rem;display:flex}.flourish:before,.flourish:after{content:"";background:linear-gradient(90deg, transparent, var(--route), transparent);flex:1;height:1px}.flourish__text{font-family:var(--sans);letter-spacing:.28em;text-transform:uppercase;white-space:nowrap;font-size:.72rem;font-weight:600}.greeting{gap:clamp(.4rem,1.5vw,.9rem);margin:0;font-weight:400;display:grid}.greeting__happy{color:var(--ink-soft);font-size:clamp(1.5rem,1rem + 2.6vw,2.9rem);font-style:italic;animation:.9s cubic-bezier(.2,.8,.2,1) 50ms both rise}.greeting__occasion{font-family:var(--sans);letter-spacing:.3em;text-indent:.3em;text-transform:uppercase;color:var(--ink);font-size:clamp(.9rem,.6rem + 1.4vw,1.5rem);font-weight:700;animation:.9s cubic-bezier(.2,.8,.2,1) .18s both rise}.greeting__occasion sup{letter-spacing:.1em;font-size:.5em}.greeting__name{letter-spacing:-.03em;text-wrap:balance;background:var(--gold);color:#0000;filter:drop-shadow(0 0 2.2rem #ffc85759);background-size:250% 100%;-webkit-background-clip:text;background-clip:text;font-size:clamp(3.4rem,1.2rem + 14vw,11rem);font-weight:600;line-height:.95;animation:1s cubic-bezier(.2,.8,.2,1) .32s both rise,7s linear 1.2s infinite shimmer;position:relative}.greeting__bang{-webkit-text-fill-color:var(--route);color:var(--route);animation:1.6s ease-in-out 1.3s infinite bounce;display:inline-block}.sparkle{color:var(--route);pointer-events:none;animation:2.6s ease-in-out infinite twinkle;position:absolute}.sparkle--1{font-size:clamp(1rem,3vw,2.2rem);animation-delay:.2s;inset:-8% auto auto -6%}.sparkle--2{font-size:clamp(.8rem,2.2vw,1.7rem);animation-delay:1.1s;inset:auto -4% -12% auto}.sparkle--3{font-size:clamp(.7rem,1.8vw,1.3rem);animation-delay:1.9s;inset:12% -9% auto auto}.dateline{font-family:var(--sans);text-transform:uppercase;justify-items:center;gap:.7rem;margin:clamp(1.8rem,5vw,3rem) 0 0;animation:1s cubic-bezier(.2,.8,.2,1) .6s both rise;display:grid}.dateline__date{letter-spacing:.34em;text-indent:.34em;color:var(--ink);font-size:clamp(.86rem,.7rem + .6vw,1.1rem);font-weight:600}.dateline__day{background:var(--gold);color:#0000;-webkit-background-clip:text;background-clip:text;margin-right:.34em}.dateline__rule{background:linear-gradient(90deg, transparent, var(--route), transparent);width:4.5rem;height:1px}.dateline__years{letter-spacing:.26em;text-indent:.26em;color:var(--ink-faint);font-size:.74rem}@keyframes fall{0%{transform:translateY(-130vh)rotate(0)}to{transform:translate3d(var(--drift,0), 130vh, 0) rotate(var(--spin,360deg))}}@keyframes drift{0%{transform:translate(0,0)scale(1)}to{transform:translate(6vw,-4vh)scale(1.18)}}@keyframes twinkle{0%,to{opacity:.25}50%{opacity:1}}@keyframes shimmer{0%{background-position:0%}to{background-position:250%}}@keyframes rise{0%{opacity:0;transform:translateY(1.2em)}to{opacity:1;transform:none}}@keyframes bounce{0%,to{transform:translateY(0)rotate(0)}30%{transform:translateY(-.16em)rotate(-6deg)}60%{transform:translateY(-.05em)rotate(4deg)}}@media (prefers-reduced-motion:reduce){body.celebrate *,body.celebrate :before,body.celebrate :after{transition:none!important;animation:none!important}.greeting__happy,.greeting__occasion,.greeting__name,.dateline{opacity:1;transform:none}.star,.sparkle{opacity:.8}}
