:root{--night:#0d1714;--needle:#16241f;--needle-hi:#1e2f28;--edge:#274036;--frost:#e9efec;--sage:#8fa89c;--sage-dim:#6b8478;--brass:#d4a94e;--brass-dim:#9a7a33;--cranberry:#b8455e;--display:Didot, "Bodoni 72", "Bodoni MT", "Playfair Display", Georgia, serif;--body:ui-sans-serif, -apple-system, "Segoe UI", Inter, Helvetica, Arial, sans-serif;--mono:ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;--gutter:clamp(1rem, 4vw, 2.5rem);--radius:10px}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--night);color:var(--frost);font-family:var(--body);background-image:radial-gradient(90% 55% at 50% -10%,rgba(212,169,78,.09),transparent 70%),radial-gradient(70% 50% at 12% 8%,rgba(184,69,94,.05),transparent 70%);background-attachment:fixed;margin:0;font-size:16px;line-height:1.6}.navbar{padding:1rem var(--gutter);border-bottom:1px solid var(--edge);backdrop-filter:blur(8px);z-index:20;background:rgba(13,23,20,.85);flex-wrap:wrap;align-items:center;gap:1.5rem;display:flex;position:sticky;top:0}.navbar-brand{font-family:var(--display);letter-spacing:.01em;color:var(--frost);margin-right:auto;font-size:1.35rem;text-decoration:none}.navbar-brand em{color:var(--brass);font-style:normal}.navbar-links{flex-wrap:wrap;gap:1.25rem;display:flex}.navbar-links a{color:var(--sage);letter-spacing:.06em;text-transform:uppercase;border-bottom:1px solid transparent;padding-bottom:2px;font-size:.9rem;text-decoration:none}.navbar-links a:hover{color:var(--frost)}.navbar-links a.active{color:var(--brass);border-bottom-color:var(--brass)}.content{max-width:1080px;padding:clamp(2rem, 6vw, 4rem) var(--gutter) 5rem;margin:0 auto}.hero{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:clamp(1.5rem,5vw,3.5rem);margin-bottom:4rem;display:grid}.hero-copy h1{font-family:var(--display);letter-spacing:-.01em;margin:.4rem 0 .75rem;font-size:clamp(2.2rem,6vw,3.6rem);font-weight:400;line-height:1.08}.hero-copy p{color:var(--sage);max-width:46ch;margin:0}.eyebrow{font-family:var(--mono);letter-spacing:.22em;text-transform:uppercase;color:var(--brass);margin:0;font-size:.78rem}.letter-mark{justify-self:end;place-items:center;display:grid}.letter-glyph{font-family:var(--display);color:var(--brass);text-shadow:0 0 60px rgba(212,169,78,.28);font-size:clamp(7rem,20vw,13rem);font-weight:400;line-height:.95}.letter-caption{font-family:var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--sage-dim);text-align:center;margin-top:.75rem;font-size:.7rem}.letter-glyph.is-empty{color:var(--sage-dim);text-shadow:none}@media (width<=720px){.hero{grid-template-columns:1fr}.letter-mark{justify-self:start}}.section{margin-bottom:3.5rem}.section-head{border-bottom:1px solid var(--edge);align-items:baseline;gap:1rem;margin-bottom:1.25rem;padding-bottom:.6rem;display:flex}.section-head h2{font-family:var(--display);margin:0;font-size:1.6rem;font-weight:400}.section-head .count{font-family:var(--mono);color:var(--sage-dim);margin-left:auto;font-size:.78rem}.pool-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:1rem;display:grid}.pool-card{background:var(--needle);border:1px solid var(--edge);border-radius:var(--radius);color:inherit;padding:1.35rem 1.35rem 1.15rem;text-decoration:none;transition:border-color .18s,transform .18s;display:block;position:relative}.pool-card:hover{border-color:var(--brass-dim);transform:translateY(-2px)}.pool-card h3{font-family:var(--display);margin:0 0 .3rem;font-size:1.3rem;font-weight:400}.pool-card p{color:var(--sage);margin:0 0 .9rem;font-size:.9rem}.pool-card-meta{font-family:var(--mono);color:var(--sage-dim);letter-spacing:.05em;gap:1rem;font-size:.75rem;display:flex}.pool-card-letter{font-family:var(--display);color:var(--brass-dim);font-size:2.1rem;line-height:1;position:absolute;top:.9rem;right:1.1rem}.ring-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.5rem;display:grid}.ring-card{background:var(--needle);border:1px solid var(--edge);border-radius:var(--radius);padding:1rem}.ring-card-head{align-items:baseline;gap:.6rem;margin-bottom:.25rem;padding:0 .35rem;display:flex}.ring-card-head h3{font-family:var(--display);margin:0;font-size:1.05rem;font-weight:400}.ring-card-head .count{font-family:var(--mono);color:var(--sage-dim);margin-left:auto;font-size:.72rem}.ring{width:100%;max-width:420px;height:auto;margin:0 auto;display:block;overflow:visible}.ring-edge{fill:none;stroke:var(--edge);stroke-width:1.4px;transition:stroke .15s,stroke-width .15s}.ring-edge.lit{stroke:var(--brass);stroke-width:2.2px}.ring-edge.dimmed{stroke:rgba(39,64,54,.45)}.ring-arrow{fill:var(--edge)}.ring-arrow.lit{fill:var(--brass)}.ring-node{fill:var(--sage);cursor:pointer;transition:fill .15s,r .15s}.ring-node.lit{fill:var(--brass)}.ring-node.receiving{fill:var(--cranberry)}.ring-label{font-family:var(--body);fill:var(--sage);cursor:pointer;-webkit-user-select:none;user-select:none;font-size:11px;transition:fill .15s}.ring-label.lit{fill:var(--frost);font-weight:600}.ring-label.receiving{fill:var(--cranberry);font-weight:600}.ring-label.dimmed{fill:var(--sage-dim);opacity:.5}.ring-centre-letter{font-family:var(--display);fill:var(--brass);text-anchor:middle;dominant-baseline:central;opacity:.85;pointer-events:none;font-size:58px}.ring-caption{text-align:center;color:var(--sage);min-height:1.5rem;margin-top:.35rem;font-size:.85rem}.ring-caption strong{color:var(--frost);font-weight:600}.ring-caption .arrow{color:var(--brass);margin:0 .4rem}@media (prefers-reduced-motion:no-preference){.ring-edge{stroke-dasharray:300;stroke-dashoffset:300px;animation:.9s ease-out forwards draw-in}}@keyframes draw-in{to{stroke-dashoffset:0}}.pairings{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.5rem;margin:0;padding:0;list-style:none;display:grid}.pairings li{background:var(--needle);border:1px solid var(--edge);border-radius:var(--radius);align-items:center;gap:.6rem;padding:.6rem .85rem;font-size:.92rem;display:flex}.pairings .giver{font-weight:600}.pairings .arrow{color:var(--brass);flex-shrink:0}.pairings .receiver{color:var(--sage)}.panel{background:var(--needle);border:1px solid var(--edge);border-radius:var(--radius);margin-bottom:1.25rem;padding:1.25rem}.panel h3{font-family:var(--display);margin:0 0 .9rem;font-size:1.2rem;font-weight:400}.field-row{flex-wrap:wrap;align-items:center;gap:.6rem;margin-bottom:.75rem;display:flex}label{color:var(--sage);letter-spacing:.04em;font-size:.82rem}select{background:var(--night);color:var(--frost);border:1px solid var(--edge);font:inherit;border-radius:6px;min-width:0;padding:.5rem .7rem;font-size:.92rem}input[type=text]{background:var(--night);color:var(--frost);border:1px solid var(--edge);font:inherit;border-radius:6px;min-width:0;padding:.5rem .7rem;font-size:.92rem}input[type=number]{background:var(--night);color:var(--frost);border:1px solid var(--edge);font:inherit;border-radius:6px;min-width:0;padding:.5rem .7rem;font-size:.92rem}input[type=text]:focus-visible{outline:2px solid var(--brass);outline-offset:2px}input[type=number]:focus-visible{outline:2px solid var(--brass);outline-offset:2px}select:focus-visible{outline:2px solid var(--brass);outline-offset:2px}button:focus-visible{outline:2px solid var(--brass);outline-offset:2px}a:focus-visible{outline:2px solid var(--brass);outline-offset:2px}button{background:var(--brass);color:#17130a;border:1px solid var(--brass);font:inherit;cursor:pointer;border-radius:6px;padding:.5rem 1rem;font-size:.9rem;font-weight:600;transition:background .15s}button:hover:not(:disabled){background:#e2ba63}button:disabled{opacity:.45;cursor:not-allowed}button.ghost{color:var(--sage);border-color:var(--edge);background:0 0;font-weight:500}button.ghost:hover:not(:disabled){background:var(--needle-hi);color:var(--frost)}button.danger{color:var(--cranberry);background:0 0;border-color:transparent;padding:.25rem .5rem;font-size:.85rem}button.danger:hover:not(:disabled){background:rgba(184,69,94,.12)}.data-table{border-collapse:collapse;width:100%;font-size:.9rem}.data-table th{text-align:left;font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--sage-dim);border-bottom:1px solid var(--edge);padding:.4rem .6rem;font-size:.72rem;font-weight:500}.data-table td{border-bottom:1px solid rgba(39,64,54,.5);padding:.5rem .6rem}.table-scroll{overflow-x:auto}.letter-grid{grid-template-columns:repeat(auto-fit,minmax(2.2rem,1fr));gap:.35rem;max-width:30rem;display:grid}.letter-toggle{aspect-ratio:1;background:var(--night);border:1px solid var(--edge);color:var(--frost);font-family:var(--display);cursor:pointer;border-radius:6px;place-items:center;padding:0;font-size:1.05rem;font-weight:400;display:grid}.letter-toggle.off{color:var(--sage-dim);opacity:.4;text-decoration:line-through}.toggle-row{align-items:flex-start;gap:.6rem;margin-bottom:.7rem;display:flex}.toggle-row input{accent-color:var(--brass);margin-top:.35rem}.toggle-row .hint{color:var(--sage-dim);font-size:.78rem;display:block}.loading,.empty{color:var(--sage-dim);padding:1.5rem 0;font-style:italic}.empty-cta{background:var(--needle);border:1px dashed var(--edge);border-radius:var(--radius);text-align:center;color:var(--sage);padding:2rem}.empty-cta strong{color:var(--frost);font-family:var(--display);margin-bottom:.4rem;font-size:1.25rem;font-weight:400;display:block}.error-box{border:1px solid var(--cranberry);border-radius:var(--radius);color:#f0bcc7;background:rgba(184,69,94,.1);margin-bottom:1rem;padding:.85rem 1rem;font-size:.9rem}.notice{border:1px solid var(--brass-dim);border-radius:var(--radius);color:var(--sage);background:rgba(212,169,78,.08);margin-bottom:1rem;padding:.7rem .9rem;font-size:.85rem}.badge{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--edge);color:var(--sage-dim);border-radius:4px;padding:.15rem .45rem;font-size:.68rem;display:inline-block}.badge.current{border-color:var(--brass-dim);color:var(--brass)}.muted{color:var(--sage-dim)}.mono{font-family:var(--mono)}footer.site-foot{border-top:1px solid var(--edge);padding:2rem var(--gutter);text-align:center;color:var(--sage-dim);font-size:.85rem}.login-shell{min-height:100vh;padding:var(--gutter);place-items:center;display:grid}.login-card{background:var(--needle);border:1px solid var(--edge);border-radius:var(--radius);width:min(24rem,100%);padding:2rem}.login-card h1{font-family:var(--display);margin:.35rem 0 .5rem;font-size:2.1rem;font-weight:400}.login-card p{margin:0 0 1.25rem}.login-card form{flex-direction:column;gap:.75rem;display:flex}.login-card input[type=password]{background:var(--night);color:var(--frost);border:1px solid var(--edge);font:inherit;border-radius:6px;width:100%;padding:.6rem .75rem}.signout{margin:0;display:inline}button.linklike{color:var(--sage);font:inherit;letter-spacing:.06em;text-transform:uppercase;cursor:pointer;background:0 0;border:none;padding:0 0 2px;font-size:.9rem}button.linklike:hover{color:var(--frost)}.reveal{min-height:100vh;padding:1.25rem var(--gutter) 2rem;outline:none;grid-template-rows:auto 1fr auto auto auto;gap:1rem;display:grid}.reveal-head{align-items:baseline;gap:1rem;display:flex}.reveal-back{color:var(--sage);letter-spacing:.06em;text-transform:uppercase;font-size:.9rem;text-decoration:none}.reveal-back:hover{color:var(--frost)}.reveal-year{color:var(--sage-dim);margin-left:auto;font-size:.85rem}.reveal-stage{place-content:center;justify-items:center;gap:1rem;min-height:0;display:grid}.reveal-title,.reveal-complete{text-align:center;animation:.6s ease-out both rise}.reveal-title h1,.reveal-complete h1{font-family:var(--display);margin:0 0 .5rem;font-size:clamp(2.5rem,7vw,4.5rem);font-weight:400}.reveal-title p,.reveal-complete p{color:var(--sage);margin:0;font-size:1.1rem}.reveal-complete .accent{color:var(--brass);font-family:var(--display);font-size:1.4em}.reveal-letter{text-align:center;animation:.8s cubic-bezier(.2,.9,.3,1.2) both letter-in}.letter-glyph.huge{font-size:clamp(9rem,30vh,20rem)}.reveal-letter .eyebrow{margin-bottom:1.25rem}.reveal-ring-wrap{justify-items:center;gap:.5rem;width:max(340px,min(60vh,620px));max-width:92vw;display:grid}.reveal-ring .ring-edge{stroke-dasharray:none;stroke-dashoffset:0;animation:none}.reveal-ring .ring-edge.newest{stroke-dasharray:300;animation:.7s ease-out both draw-in}.reveal-ring .ring-edge.settled{stroke:var(--brass-dim);stroke-width:1.6px}.reveal-ring .ring-node.waiting{fill:var(--sage-dim);opacity:.5}.reveal-ring{width:100%;max-width:100%}.reveal-callout-slot{place-items:center;min-height:4.5rem;display:grid}.reveal-callout{font-family:var(--display);flex-wrap:wrap;justify-content:center;align-items:baseline;gap:.85rem;font-size:clamp(1.8rem,5vw,3.2rem);animation:.45s ease-out both rise;display:flex}.reveal-callout .giver{color:var(--brass)}.reveal-callout .receiver{color:var(--cranberry)}.reveal-callout .gives{font-family:var(--body);letter-spacing:.16em;text-transform:uppercase;color:var(--sage-dim);font-size:.9rem}.reveal-all-rings{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;margin-top:1.5rem;display:grid}.reveal-all-rings .ring{width:100%;max-width:320px}.reveal-progress{flex-wrap:wrap;justify-content:center;gap:4px;display:flex}.pip{background:var(--edge);border-radius:2px;width:20px;height:3px;transition:background .3s}.pip.done{background:var(--brass)}.reveal-controls{justify-content:center;gap:.6rem;display:flex}.reveal-hint{text-align:center;margin:0;font-size:.78rem}.reveal-cta{color:var(--brass);border-bottom:1px solid var(--brass-dim);margin-top:.9rem;padding-bottom:2px;font-weight:600;text-decoration:none;display:inline-block}.reveal-cta:hover{color:#e2ba63}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes letter-in{0%{opacity:0;transform:scale(.6)rotate(-6deg)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.reveal-title,.reveal-complete,.reveal-letter,.reveal-callout,.reveal-ring .ring-edge.newest{animation:none}}.reveal-gate{background:var(--needle);border:1px dashed var(--brass-dim);border-radius:var(--radius);text-align:center;margin-bottom:3.5rem;padding:clamp(2rem,6vw,3.5rem)}.reveal-gate strong{font-family:var(--display);color:var(--frost);margin-bottom:.4rem;font-size:clamp(1.6rem,4vw,2.2rem);font-weight:400;display:block}.reveal-gate p{color:var(--sage);margin:0 0 1.5rem}.gate-actions{flex-wrap:wrap;justify-content:center;gap:.75rem;display:flex}.reveal-overlay{z-index:50;background:var(--night);background-image:radial-gradient(90% 55% at 50% -10%,rgba(212,169,78,.11),transparent 70%),radial-gradient(70% 50% at 12% 8%,rgba(184,69,94,.06),transparent 70%);animation:.4s ease-out both overlay-in;position:fixed;inset:0;overflow-y:auto}.reveal-skip{margin-left:1rem}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.reveal-overlay{animation:none}}