:root { --paper: #f8f4ef; --white: #fffdf9; --ink: #006880; --ink-dark: #07556b; --turquoise: #18b9bb; --mint: #53c85a; --orange: #f08b45; --line: #d8e9e6; --shadow: 0 24px 65px rgba(15, 78, 88, .14); } * { box-sizing: border-box; } [hidden] { display: none !important; } html { scroll-behavior: smooth; } body { margin: 0; min-height: 100vh; color: var(--ink-dark); background-color: var(--paper); background-image: radial-gradient(circle at 4% 10%, rgba(27, 185, 187, .18) 0 4px, transparent 5px), radial-gradient(circle at 93% 21%, rgba(82, 200, 90, .20) 0 5px, transparent 6px), radial-gradient(circle at 13% 82%, rgba(240, 139, 69, .14) 0 3px, transparent 4px), radial-gradient(circle at 85% 89%, rgba(0, 151, 178, .15) 0 3px, transparent 4px); font-family: Georgia, "Times New Roman", serif; line-height: 1.5; } button, input { font: inherit; } .skip-link { position: fixed; z-index: 20; top: .75rem; left: .75rem; padding: .65rem 1rem; color: white; background: var(--ink); border-radius: 999px; transform: translateY(-200%); } .skip-link:focus { transform: translateY(0); } .page-shell { width: min(1120px, calc(100% - 40px)); margin: 0 auto; min-height: calc(100vh - 60px); padding: 64px 0 36px; display: grid; grid-template-columns: minmax(300px, 500px) minmax(340px, 470px); gap: clamp(40px, 7vw, 100px); align-items: center; justify-content: center; } .invite-column { min-width: 0; text-align: center; } .invite-card { display: block; overflow: hidden; border-radius: 5px; box-shadow: var(--shadow), 0 0 0 1px rgba(0, 93, 111, .06); transition: transform .25s ease, box-shadow .25s ease; } .invite-card:hover { transform: translateY(-4px) rotate(-.15deg); box-shadow: 0 30px 78px rgba(15, 78, 88, .19); } .invite-card img { display: block; width: 100%; height: auto; } .pdf-link { display: inline-flex; align-items: center; gap: .5rem; margin-top: 1.2rem; color: var(--ink); font: 700 .75rem/1.2 system-ui, sans-serif; letter-spacing: .09em; text-decoration: none; text-transform: uppercase; } .pdf-link:hover { text-decoration: underline; } .pdf-link svg { width: 20px; fill: none; stroke: currentColor; stroke-width: 1.8; } .rsvp-card { position: relative; overflow: hidden; min-height: 540px; padding: clamp(30px, 5vw, 54px); background: rgba(255, 253, 249, .92); border: 1px solid rgba(0, 104, 128, .1); border-radius: 28px; box-shadow: var(--shadow); backdrop-filter: blur(10px); } .eyebrow { margin-bottom: 1.15rem; color: var(--turquoise); font: 750 .74rem/1 system-ui, sans-serif; letter-spacing: .26em; } .hello { margin: 0 0 .15rem; color: var(--mint); font-family: "Segoe Script", "Bradley Hand", cursive; font-size: clamp(1.5rem, 4vw, 2rem); font-weight: 700; } h2 { margin: 0; color: var(--ink); font-size: clamp(2rem, 5vw, 3rem); font-weight: 400; line-height: 1.05; } .intro { margin: 1rem 0 1.6rem; font-size: 1rem; } fieldset { display: grid; gap: .7rem; margin: 0; padding: 0; border: 0; } .choice { position: relative; display: flex; align-items: center; gap: .9rem; padding: .9rem 1rem; cursor: pointer; background: var(--white); border: 1.5px solid var(--line); border-radius: 15px; transition: border-color .16s, background .16s, transform .16s; } .choice:hover { border-color: #8ad4ce; transform: translateX(2px); } .choice:has(input:checked) { background: #effbf8; border-color: var(--turquoise); } .choice:has(input:focus-visible) { outline: 3px solid rgba(24, 185, 187, .25); outline-offset: 2px; } .choice input { position: absolute; width: 1px; height: 1px; opacity: 0; } .choice-mark { display: grid; flex: 0 0 42px; width: 42px; height: 42px; place-items: center; color: var(--ink); background: #edf8f6; border-radius: 50%; } .choice:has(input:checked) .choice-mark { color: white; background: var(--turquoise); } .choice-mark svg { width: 23px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.7; } .choice strong, .choice small { display: block; } .choice strong { color: var(--ink-dark); font-size: .98rem; } .choice small { margin-top: .1rem; color: #618087; font-family: system-ui, sans-serif; font-size: .74rem; } .companion { margin-top: 1.15rem; } .companion label { display: block; margin-bottom: .4rem; font-weight: 700; } .companion input { width: 100%; padding: .85rem 1rem; color: var(--ink-dark); background: white; border: 1.5px solid var(--line); border-radius: 12px; outline: none; } .companion input:focus { border-color: var(--turquoise); box-shadow: 0 0 0 3px rgba(24, 185, 187, .15); } button { width: 100%; margin-top: 1.35rem; padding: .95rem 1.2rem; cursor: pointer; color: white; background: var(--ink); border: 0; border-radius: 999px; font-family: system-ui, sans-serif; font-size: .94rem; font-weight: 750; letter-spacing: .02em; transition: background .18s, transform .18s; } button:hover { background: var(--turquoise); transform: translateY(-1px); } button:disabled { cursor: wait; opacity: .65; transform: none; } button.secondary { color: var(--ink); background: transparent; border: 1.5px solid var(--ink); } button.secondary:hover { color: white; background: var(--ink); } .form-error { margin: .8rem 0 -.5rem; color: #a43f28; font: 650 .84rem/1.4 system-ui, sans-serif; } .update-note { margin: .8rem 0 0; color: #6a8488; font: .76rem/1.4 system-ui, sans-serif; text-align: center; } .state-message { padding-top: 4rem; text-align: center; } .state-message p:not(.hello) { margin: 1.1rem auto; max-width: 29rem; } .state-icon { display: grid; width: 64px; height: 64px; margin: 0 auto 1.6rem; place-items: center; color: white; background: var(--orange); border-radius: 50%; font: 700 1.8rem/1 system-ui, sans-serif; } .success .state-icon { background: var(--mint); } .photo-upload { display: flex; gap: .9rem; margin-top: 1.8rem; padding: 1rem; background: #fff6ed; border: 1.5px solid #f5c9a9; border-radius: 15px; } .photo-upload-icon { display: grid; flex: 0 0 42px; width: 42px; height: 42px; place-items: center; background: white; border-radius: 50%; font: 1.25rem/1 system-ui, sans-serif; } .photo-upload h3 { margin: 0; color: var(--ink); font-size: 1.05rem; } .photo-upload p { margin: .35rem 0 .75rem; font-size: .9rem; } .photo-upload-link { color: var(--ink); font: 750 .8rem/1.2 system-ui, sans-serif; letter-spacing: .04em; text-transform: uppercase; } .photo-upload-link:hover { color: var(--turquoise); } .loading { position: absolute; inset: 0; z-index: 2; display: flex; align-items: center; justify-content: center; gap: 8px; background: var(--white); } .loading span:not(.visually-hidden) { width: 10px; height: 10px; background: var(--turquoise); border-radius: 50%; animation: bounce .8s infinite alternate; } .loading span:nth-child(2) { animation-delay: .15s; background: var(--mint); } .loading span:nth-child(3) { animation-delay: .3s; background: var(--orange); } .mini-confetti i { position: absolute; z-index: -1; width: 8px; height: 8px; border-radius: 50%; opacity: .55; } .mini-confetti i:nth-child(1) { top: 5%; right: 9%; background: var(--mint); } .mini-confetti i:nth-child(2) { top: 14%; right: 5%; width: 5px; height: 5px; background: var(--turquoise); } .mini-confetti i:nth-child(3) { bottom: 10%; left: 6%; background: var(--orange); } .mini-confetti i:nth-child(4) { bottom: 5%; right: 13%; width: 12px; height: 12px; background: var(--turquoise); } .mini-confetti i:nth-child(5) { top: 3%; left: 41%; width: 5px; height: 5px; background: var(--orange); } .mini-confetti i:nth-child(6) { bottom: 25%; right: 3%; width: 5px; height: 5px; background: var(--mint); } .mini-confetti i:nth-child(7) { top: 31%; left: 2%; width: 4px; height: 4px; background: var(--turquoise); } .mini-confetti i:nth-child(8) { bottom: 3%; left: 36%; width: 6px; height: 6px; background: var(--mint); } footer { padding: 0 1rem 24px; color: #668286; font: .72rem/1.4 system-ui, sans-serif; letter-spacing: .12em; text-align: center; text-transform: uppercase; } .visually-hidden { position: absolute !important; overflow: hidden; width: 1px; height: 1px; padding: 0; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } @keyframes bounce { to { transform: translateY(-10px); } } @media (max-width: 820px) { .page-shell { width: min(590px, calc(100% - 28px)); padding-top: 28px; grid-template-columns: 1fr; gap: 34px; } .invite-card { max-width: 480px; margin-inline: auto; } .rsvp-card { min-height: 520px; } } @media (max-width: 480px) { .page-shell { width: 100%; padding: 0 0 24px; gap: 0; } .invite-card { border-radius: 0; box-shadow: none; } .pdf-link { margin: 1rem 0 1.4rem; } .rsvp-card { min-height: 0; padding: 36px 20px 40px; border-inline: 0; border-radius: 28px 28px 0 0; } .choice { padding: .82rem; } .state-message { padding-block: 3rem; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; transition-duration: .01ms !important; } }