:root{--navy:#103f4b;--cream:#f5f1e5;--teal:#1d6f73;--gold:#f3bb66;--coral:#e3795f}*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:Arial,Helvetica,sans-serif}body.display{height:100vh;overflow:hidden;background:var(--navy)}.slide{display:none;position:absolute;inset:0;padding:5vh 6vw;color:var(--cream);background:#144c58;overflow:hidden}.slide.active{display:block}.slide.intro{background:#164f59}.slide.coast{background:#d9e8df;color:#123e49}.slide.light{background:#f3eddd;color:#173f4a}.slide.dark{background:#223f4b}.brand{position:relative;z-index:2;font-size:clamp(14px,1.7vw,30px);font-weight:bold;letter-spacing:.18em}.brand span{display:block;font-size:.55em;letter-spacing:.3em;margin-top:.3em}.copy{position:relative;z-index:2;margin-top:11vh;max-width:75%}.eyebrow{font-size:clamp(13px,1.5vw,25px);font-weight:bold;letter-spacing:.18em;color:var(--gold);margin-bottom:2vh}.light .eyebrow,.coast .eyebrow{color:#bd604a}h1{font-family:Georgia,serif;font-weight:normal;font-size:clamp(44px,7.6vw,140px);line-height:.99;margin:0 0 3vh;letter-spacing:-.035em}.dot{color:var(--gold)}.light .dot,.coast .dot{color:var(--coral)}.copy p{font-size:clamp(20px,2.45vw,45px);line-height:1.35;margin:0}.tag{display:inline-block;margin-top:3vh;padding:12px 16px;border:1px solid currentColor;font-size:clamp(11px,1.05vw,20px);letter-spacing:.1em}.footer{position:absolute;z-index:2;bottom:4vh;left:6vw;right:6vw;border-top:1px solid currentColor;padding-top:2vh;font-size:clamp(10px,1vw,18px);font-weight:bold;letter-spacing:.12em}.footer span{float:right}.art{position:absolute;right:-5vw;bottom:-4vh;width:54vw;height:80vh;overflow:hidden}.sun{position:absolute;width:22vw;height:22vw;border-radius:50%;background:#f1c175;top:8%;right:12%}.water{position:absolute;width:120%;height:53%;border-radius:50% 0 0 0;bottom:0}.w1{background:#71a9a4;transform:rotate(-12deg);bottom:18%}.w2{background:#3d8586;transform:rotate(9deg);bottom:1%}.shore{position:absolute;background:#e9cf9d;width:115%;height:27%;bottom:-10%;border-radius:50%;transform:rotate(-9deg)}.progress{position:fixed;bottom:0;left:0;height:5px;background:#f0bc71;width:0}.entries h1{font-size:clamp(40px,6vw,110px)}.entry{font-family:Georgia,serif;font-size:clamp(25px,3.3vw,60px);margin:.35em 0}.entry small{font:normal .48em Arial;display:block;margin-top:.25em}.display .adminlink{display:none}@media(max-width:650px){.copy{max-width:92%;margin-top:13vh}.art{opacity:.4;width:70vw}.footer span{display:none}}body.admin{background:#f5f1e5;color:#173f4a;padding:30px;font-size:18px}.admin main{max-width:900px;margin:auto}.admin h1{font-size:48px}.admin h2{font:normal 30px Georgia}.card{background:#fff;border-radius:12px;padding:22px;margin:20px 0;box-shadow:0 3px 20px #1b414515}label{display:block;font-weight:bold;margin:14px 0 6px}input,textarea,button{font:inherit;padding:12px;border-radius:6px;border:1px solid #8ba09e}input,textarea{width:100%}button{background:#155f65;color:white;border:0;cursor:pointer;margin-top:14px}button.delete{background:#994a3f;margin:0;float:right;padding:8px}.admin li{padding:12px 0;border-bottom:1px solid #ddd;min-height:55px}.notice{background:#e6f0e9;padding:14px;border-radius:6px}.error{color:#a12929}.admin nav a{color:#155f65}.row{display:flex;gap:16px}.row>div{flex:1}

.committee .copy{margin-top:8vh}.committee h1{font-size:clamp(40px,6.5vw,110px);margin-bottom:3vh}.committee .names p{font-family:Georgia,serif;font-size:clamp(20px,2.8vw,50px);margin:1.6vh 0}.committee .names b{font:700 clamp(12px,1.3vw,22px) Arial;text-transform:uppercase;letter-spacing:.08em;display:inline-block;width:14vw}.photo-slide{background:#173e47}.photo-heading{position:absolute;left:6vw;top:20vh;z-index:2;width:25vw}.photo-heading h1{font-size:clamp(35px,4.5vw,78px)}.photo-pair{position:absolute;left:35vw;right:6vw;top:14vh;bottom:12vh;display:flex;gap:1vw;justify-content:center}.photo-pair img{width:calc(50% - .5vw);height:100%;object-fit:contain;background:#102e35;border-radius:4px}@media(max-width:650px){.photo-heading{top:17vh;width:85vw}.photo-heading h1{font-size:8vw}.photo-pair{top:36vh;left:6vw;right:6vw;bottom:12vh}.committee .names b{width:32vw}}
/* Full-size club photographs, with a soft backdrop made from the same image. */
.photo-slide{background:#153944}.photo-background,.photo-shade{position:absolute;inset:0}.photo-background{background-image:var(--photo);background-size:cover;background-position:center;filter:blur(18px);transform:scale(1.08);opacity:.42}.photo-shade{background:linear-gradient(90deg,rgba(13,47,54,.96) 0%,rgba(13,47,54,.84) 30%,rgba(13,47,54,.2) 62%,rgba(13,47,54,.3) 100%)}.photo-heading{top:30vh;width:27vw}.photo-frame{position:absolute;left:35vw;right:4vw;top:7vh;bottom:10vh;text-align:center}.photo-frame img{width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 8px 24px rgba(0,0,0,.32))}.photo-slide .brand,.photo-slide .footer{z-index:3}
/* A distinct, full-screen celebration for each person. */
.birthday-slide{background:#3f244a;color:#fff6e7}.birthday-slide .brand{color:#fff6e7}.birthday-copy{position:relative;z-index:2;margin-top:10vh;max-width:75vw}.birthday-eyebrow{color:#ffce8c;font-size:clamp(13px,1.35vw,24px);font-weight:bold;letter-spacing:.18em}.birthday-title{font:italic clamp(38px,5.2vw,90px) Georgia,serif;color:#ffd08c;margin:3vh 0 0}.birthday-name{font-size:clamp(50px,8vw,140px);line-height:1.02;overflow-wrap:anywhere;margin:1vh 0 2vh;color:white}.birthday-date{display:inline-block;border-top:2px solid #ffd08c;border-bottom:2px solid #ffd08c;padding:1.2vh 0;font-size:clamp(21px,2.6vw,42px);letter-spacing:.08em}.birthday-wish{font:italic clamp(19px,2.2vw,38px) Georgia,serif;margin-top:3vh;color:#f5e0dc}.birthday-decoration{position:absolute;inset:0;overflow:hidden;pointer-events:none}.birthday-ring{position:absolute;width:55vw;height:55vw;border:1px solid rgba(255,212,152,.2);border-radius:50%;right:-14vw;top:-14vw;box-shadow:0 0 0 4vw rgba(255,212,152,.025),0 0 0 8vw rgba(255,212,152,.025)}.balloon{position:absolute;border-radius:50% 50% 46% 46%;width:10vw;height:13vw;box-shadow:inset -14px -10px 0 rgba(0,0,0,.12),inset 12px 9px 0 rgba(255,255,255,.2);right:10vw;top:13vh;transform:rotate(10deg);background:#d9888c}.balloon:after{content:'';position:absolute;width:1px;height:21vh;background:rgba(255,255,255,.7);left:50%;top:100%}.balloon-two{right:22vw;top:29vh;width:8vw;height:10vw;background:#edba75;transform:rotate(-13deg)}.balloon-three{right:5vw;top:40vh;width:8vw;height:10vw;background:#87b8ac;transform:rotate(15deg)}.confetti{position:absolute;inset:0;opacity:.7;background-image:radial-gradient(circle,#ffcc87 2px,transparent 3px),radial-gradient(circle,#ef929b 2px,transparent 3px);background-size:123px 109px,167px 143px;background-position:30px 18px,70px 75px;mask-image:linear-gradient(90deg,transparent 45%,black)}
@media(max-width:650px){.photo-heading{top:17vh;width:85vw}.photo-heading h1{font-size:8vw}.photo-frame{left:7vw;right:7vw;top:34vh;bottom:12vh}.birthday-copy{max-width:90vw;margin-top:13vh}.birthday-name{font-size:11vw}.balloon{opacity:.45}}
/* Birthday party: animated sparkle, falling confetti and a popping bottle. */
.birthday-slide{background:radial-gradient(ellipse at 76% 56%,#8d245e 0%,#58245b 34%,#281a4b 76%);color:#fff8e9}.birthday-copy{max-width:70vw;margin-top:8vh;text-shadow:0 3px 20px rgba(20,5,25,.45)}.birthday-title{color:#ffd383;text-shadow:0 0 25px rgba(255,190,77,.35)}.birthday-name{font-size:clamp(50px,7.7vw,138px);color:#fff}.birthday-date{color:#ffe3a0;border-color:#ffce70}.birthday-wish{color:#fff3e8}.birthday-ring{border:2px solid rgba(255,216,142,.24);box-shadow:0 0 0 3vw rgba(255,220,160,.035),0 0 0 7vw rgba(255,220,160,.025)}.birthday-decoration .balloon{z-index:1;animation:balloonFloat 3.8s ease-in-out infinite alternate}.birthday-decoration .balloon-one{right:4vw;top:5vh;width:8vw;height:10vw;background:#fb668a}.birthday-decoration .balloon-two{right:22vw;top:8vh;width:6vw;height:7.7vw;background:#ffce63;animation-delay:-1.2s}.birthday-decoration .balloon-three{right:12vw;top:2vh;width:7vw;height:9vw;background:#55c8cf;animation-delay:-2.4s}.birthday-decoration .balloon-four{right:30vw;top:15vh;width:5vw;height:6.4vw;background:#ea74c5;animation-delay:-.8s}.birthday-decoration .balloon-five{right:1vw;top:33vh;width:5.8vw;height:7.4vw;background:#f9a855;animation-delay:-1.6s}.birthday-decoration .balloon:after{height:12vh}.birthday-slide .confetti{opacity:.55;mask-image:none;background-size:123px 109px,167px 143px}.confetti-piece{position:absolute;z-index:1;top:-10%;width:9px;height:20px;border-radius:2px;background:#ffcc5c;opacity:.9;animation:confettiFall 5s linear infinite}.confetti-piece:nth-of-type(3n){background:#ff739b}.confetti-piece:nth-of-type(3n+1){background:#6bd7d3}.confetti-piece:nth-of-type(4n){width:8px;height:10px;background:#f8a4ee}.champagne{position:absolute;z-index:2;width:17vw;height:45vh;right:8vw;bottom:8vh;transform:rotate(19deg);transform-origin:bottom center}.champagne>svg{width:100%;height:100%;overflow:visible;filter:drop-shadow(0 9px 14px rgba(18,0,25,.45))}.cork{position:absolute;z-index:3;width:19%;height:8%;left:41%;top:9%;background:#ce9a58;border:2px solid #ffe0a3;border-radius:30% 30% 15% 15%;animation:corkPop 4s ease-out infinite}.pop-burst{position:absolute;left:50%;top:11%;z-index:4}.pop-burst i{position:absolute;width:8px;height:8px;border-radius:50%;background:#fff5bd;box-shadow:0 0 12px #ffd66b;animation:popSpark 4s ease-out infinite}.pop-burst i:nth-child(1){--x:-80px;--y:-110px}.pop-burst i:nth-child(2){--x:80px;--y:-100px}.pop-burst i:nth-child(3){--x:-120px;--y:-40px}.pop-burst i:nth-child(4){--x:120px;--y:-30px}.pop-burst i:nth-child(5){--x:-35px;--y:-140px}.pop-burst i:nth-child(6){--x:40px;--y:-145px}.champagne-glass{position:absolute;z-index:2;width:8vw;height:32vh;right:1.5vw;bottom:11vh;transform:rotate(7deg)}.champagne-glass svg{height:100%;width:100%;filter:drop-shadow(0 5px 10px rgba(0,0,0,.25))}.party-sparkle{position:absolute;color:#ffde85;font-size:clamp(26px,4vw,65px);text-shadow:0 0 18px #ffce56;animation:partyTwinkle 2.3s ease-in-out infinite alternate}.sparkle-one{right:31vw;top:32vh}.sparkle-two{right:4vw;top:25vh;animation-delay:-1s}.sparkle-three{right:24vw;bottom:16vh;animation-delay:-1.6s}
@keyframes balloonFloat{from{transform:translateY(0) rotate(-7deg)}to{transform:translateY(-14px) rotate(7deg)}}@keyframes confettiFall{0%{transform:translateY(-10vh) rotate(0);opacity:0}10%{opacity:.85}90%{opacity:.85}100%{transform:translateY(115vh) rotate(var(--spin));opacity:0}}@keyframes corkPop{0%,15%{transform:translate(0,0);opacity:1}38%,75%{transform:translate(35px,-120px) rotate(110deg);opacity:0}100%{opacity:0}}@keyframes popSpark{0%,16%{transform:translate(0,0) scale(.2);opacity:0}25%{opacity:1}45%,100%{transform:translate(var(--x),var(--y)) scale(1.2);opacity:0}}@keyframes partyTwinkle{from{transform:scale(.6) rotate(0);opacity:.45}to{transform:scale(1.2) rotate(25deg);opacity:1}}
@media(max-width:650px){.birthday-copy{max-width:90vw;margin-top:14vh}.birthday-name{font-size:11vw}.champagne{width:29vw;height:30vh;right:11vw;bottom:9vh;opacity:.48}.champagne-glass{width:12vw;height:21vh;opacity:.5}.birthday-decoration .balloon{opacity:.45}.confetti-piece{width:6px;height:12px}}
@media(prefers-reduced-motion:reduce){.birthday-decoration *{animation:none!important}.cork{transform:translate(25px,-45px) rotate(40deg)}.pop-burst i{opacity:.8}}
