@font-face {
    font-family:BirthdaySans;
    src:url('../fonts/DMSans-Regular.woff2') format('woff2');
    font-weight:400 500;
    font-style:normal;
    font-display:swap
}
@font-face {
    font-family:BirthdaySans;
    src:url('../fonts/DMSans-Bold.woff2') format('woff2');
    font-weight:600 900;
    font-style:normal;
    font-display:swap
}
:root {
    --rose:#b93f75;
    --rose-hover:#96305e;
    --pink:#d95c91;
    --blush:#fce7f0;
    --background:#fff9fc;
    --ink:#34303a;
    --muted:#625a66;
    --line:#ecdce4;
    --green:#26734d;
    --red:#b42335;
    --shadow:0 12px 40px #71395309;
    --radius:24px
}
* {
    box-sizing:border-box
}
html {
    scroll-behavior:smooth;
    scroll-padding-top:28px
}
body {
    margin:0;
    background:var(--background);
    color:var(--ink);
    font-family:BirthdaySans,'Segoe UI',sans-serif;
    font-size:19px;
    line-height:1.65
}
a {
    color:var(--rose);
    text-underline-offset:4px
}
button,input,select,textarea {
    font:inherit
}
button,a,input,select,textarea,summary {
    -webkit-tap-highlight-color:transparent
}
button {
    cursor:pointer
}
button:disabled {
    cursor:wait;
    opacity:.65
}
svg {
    width:24px;
    height:24px;
    flex-shrink:0
}
img {
    display:block;
    max-width:100%;
    height:auto
}
h1,h2,h3,p {
    margin-top:0
}
h1,h2,h3 {
    line-height:1.2;
    font-weight:800;
    letter-spacing:-.035em
}
h1 {
    font-size:clamp(34px,4vw,52px);
    margin-bottom:22px
}
h2 {
    font-size:30px;
    margin-bottom:18px
}
h3 {
    font-size:24px
}
p {
    margin-bottom:22px
}
small {
    font-size:15px
}
strong {
    font-weight:800
}
a,button {
    touch-action:manipulation
}
:focus-visible {
    outline:3px solid #703f91;
    outline-offset:5px
}
[hidden] {
    display:none!important
}
.container {
    max-width:1180px;
    margin:0 auto;
    padding-left:28px;
    padding-right:28px
}
.narrow {
    max-width:810px
}
.site-header {
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:20px;
    padding-top:25px;
    padding-bottom:25px
}
.brand {
    display:flex;
    gap:12px;
    align-items:center;
    text-decoration:none;
    color:var(--ink);
    font-size:25px;
    font-weight:800;
    line-height:1.25
}
.brand small {
    display:block;
    font-weight:500;
    font-size:13px;
    letter-spacing:.015em;
    color:var(--muted);
    margin-top:5px
}
.brand-icon {
    display:grid;
    place-items:center;
    width:48px;
    height:48px;
    border-radius:50%;
    background:var(--blush);
    color:var(--rose)
}
.brand-icon svg {
    width:30px;
    height:30px
}
.header-link {
    display:flex;
    align-items:center;
    gap:10px;
    font-weight:700;
    text-decoration:none;
    min-height:52px;
    font-size:16px
}
.button {
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:12px;
    min-height:56px;
    padding:14px 25px;
    background:var(--rose);
    color:white;
    text-decoration:none;
    border:2px solid var(--rose);
    border-radius:14px;
    font-weight:800;
    line-height:1.35;
    transition:background .15s,box-shadow .15s;
    text-align:center
}
.button:hover {
    background:var(--rose-hover);
    border-color:var(--rose-hover);
    box-shadow:0 6px 18px #b93f7520
}
.button.secondary {
    background:white;
    color:var(--rose);
    border-color:#d9afc3
}
.button.secondary:hover {
    background:var(--blush);
    border-color:var(--rose)
}
.button.danger {
    background:var(--red);
    border-color:var(--red)
}
.button.danger:hover {
    background:#8f1c2a
}
.wide {
    width:100%
}
.button-row {
    display:flex;
    gap:14px;
    flex-wrap:wrap
}
.eyebrow {
    font-size:14px;
    font-weight:800;
    letter-spacing:.16em;
    text-transform:uppercase;
    color:var(--rose);
    margin-bottom:19px
}
.hero {
    display:grid;
    grid-template-columns:1.05fr 1fr;
    align-items:center;
    gap:50px;
    padding-top:36px;
    padding-bottom:62px
}
.hero h1 {
    font-family:Georgia,'Times New Roman',serif;
    font-size:clamp(49px,5.8vw,76px);
    font-weight:400;
    line-height:1.1;
    letter-spacing:-.045em;
    max-width:560px
}
.hero-copy {
    padding:18px 0
}
.hero-rule {
    display:flex;
    gap:16px;
    align-items:center;
    color:var(--pink);
    margin:26px 0
}
.hero-rule span {
    height:1px;
    width:62px;
    background:#dcb6c8
}
.hero-rule svg {
    width:19px;
    height:19px
}
.invitation-text {
    color:var(--muted);
    font-size:20px;
    max-width:515px;
    line-height:1.85;
    white-space:normal
}
.hero-small {
    font-size:15px;
    color:var(--muted);
    margin:17px 0 0
}
.hero-art {
    position:relative;
    min-width:0;
    display:flex;
    justify-content:center;
    align-items:center;
    padding-bottom:14px
}
.hero-art>img {
    width:100%;
    max-width:510px
}
.hero-photo {
    aspect-ratio:1/1.08;
    object-fit:cover;
    border-radius:48% 48% 30px 30px
}
.art-caption {
    position:absolute;
    bottom:11px;
    left:12%;
    right:5%;
    background:#fffdf8f2;
    border:1px solid #e7d9d0;
    box-shadow:0 12px 28px #6831480b;
    transform:rotate(-3deg);
    padding:21px 26px;
    border-radius:14px;
    text-align:center
}
.art-caption span {
    display:block;
    font-size:14px;
    color:var(--muted)
}
.art-caption strong {
    font-family:Georgia,serif;
    font-size:27px;
    font-weight:400
}
.art-caption svg {
    margin-left:10px;
    width:18px;
    color:var(--rose);
    vertical-align:middle
}
.event-info {
    display:grid;
    grid-template-columns:repeat(3,1fr);
    gap:22px
}
.info-card {
    background:white;
    border:1px solid var(--line);
    border-radius:var(--radius);
    padding:28px 30px;
    box-shadow:var(--shadow)
}
.icon-disc {
    width:52px;
    height:52px;
    background:var(--blush);
    color:var(--rose);
    border-radius:17px;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    margin-bottom:17px
}
.icon-disc svg {
    width:27px;
    height:27px
}
.info-card h2 {
    font-size:23px;
    margin-bottom:10px
}
.info-card strong {
    font-size:20px
}
.info-card p {
    color:var(--muted);
    font-size:17px;
    margin:6px 0 0
}
.info-card .text-link {
    margin-top:6px
}
.registration-section {
    padding-top:86px;
    padding-bottom:30px
}
.section-intro {
    text-align:center;
    max-width:700px;
    margin:0 auto 34px
}
.section-intro h2 {
    font-family:Georgia,serif;
    font-size:48px;
    font-weight:400;
    letter-spacing:-.04em
}
.section-intro p:not(.eyebrow) {
    color:var(--muted)
}
.panel {
    background:white;
    border:1px solid var(--line);
    border-radius:var(--radius);
    padding:36px;
    box-shadow:var(--shadow)
}
.form-panel {
    max-width:760px;
    margin:0 auto
}
.field {
    margin-bottom:27px;
    min-width:0
}
label,legend {
    font-weight:800;
    display:block;
    margin-bottom:10px;
    font-size:19px
}
.required-note {
    display:inline-block;
    font-weight:500;
    font-size:14px;
    color:var(--muted);
    margin-left:7px
}
input:not([type=radio]):not([type=checkbox]),select,textarea {
    width:100%;
    padding:15px 17px;
    min-height:56px;
    border:1.5px solid #cbbbc5;
    border-radius:12px;
    color:var(--ink);
    background:#fff;
    line-height:1.5
}
input::placeholder,textarea::placeholder {
    color:#716975;
    opacity:1
}
textarea {
    resize:vertical
}
input[readonly] {
    background:#fff9fc;
    overflow-wrap:anywhere;
    font-size:16px;
    margin-bottom:18px
}
input[aria-invalid=true] {
    border-color:var(--red)
}
input[type=file] {
    font-size:17px
}
input[type=file]::file-selector-button {
    background:var(--blush);
    border:0;
    border-radius:8px;
    padding:10px;
    color:var(--rose);
    margin-right:12px;
    cursor:pointer
}
.field-hint {
    font-size:16px;
    color:var(--muted);
    margin-top:8px;
    margin-bottom:14px
}
.field-error {
    color:var(--red);
    font-size:17px;
    font-weight:700;
    margin:9px 0 0
}
fieldset {
    border:0;
    padding:0;
    min-width:0
}
legend {
    padding:0;
    line-height:1.5;
    width:100%
}
.attendance-options {
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:16px;
    margin-top:10px
}
.choice {
    position:relative;
    cursor:pointer;
    font-weight:400;
    margin:0
}
.choice>input {
    position:absolute;
    top:21px;
    right:18px;
    width:22px;
    height:22px;
    accent-color:var(--rose);
    cursor:pointer;
    z-index:1
}
.choice-content {
    display:flex;
    flex-direction:column;
    align-items:flex-start;
    gap:6px;
    height:100%;
    border:2px solid #e4d7df;
    border-radius:16px;
    padding:20px 20px 22px;
    background:#fff;
    transition:border-color .15s
}
.choice-content strong {
    font-size:18px;
    line-height:1.4;
    max-width:100%
}
.choice-content>span:last-child {
    font-size:14px;
    color:var(--muted)
}
.choice-icon {
    display:grid;
    place-items:center;
    width:46px;
    height:46px;
    border-radius:14px;
    background:rgba(185,63,117,.10);
    color:var(--rose);
    margin-bottom:6px
}
.choice-icon.neutral {
    background:rgba(112,63,145,.09);
    color:#703f91
}
.choice-icon svg {
    width:26px;
    height:26px
}
.neutral {
    color:var(--muted);
    background:#f4f1f4
}
.choice input:checked+.choice-content {
    border-color:var(--rose);
    background:#fff5f9
}
.choice input:focus-visible+.choice-content {
    outline:3px solid #703f91;
    outline-offset:4px
}
.stepper {
    display:flex;
    gap:18px;
    align-items:center;
    max-width:300px;
    margin-top:12px
}
.step-button {
    height:56px;
    min-width:56px;
    border-radius:12px;
    border:1.5px solid #d9afc3;
    background:#fff5f9;
    color:var(--rose);
    font-size:30px;
    line-height:1
}
.step-button:disabled {
    cursor:default
}
.stepper>div {
    display:flex;
    align-items:center;
    gap:8px;
    flex:1
}
.stepper input[type=number] {
    width:75px;
    text-align:center;
    padding:10px 4px;
    font-weight:800;
    appearance:textfield;
    -moz-appearance:textfield
}
.stepper input::-webkit-inner-spin-button,.stepper input::-webkit-outer-spin-button {
    -webkit-appearance:none
}
.stepper>div>span {
    font-size:16px
}
.privacy-note {
    display:flex;
    gap:10px;
    align-items:flex-start;
    color:var(--muted);
    font-size:15px;
    line-height:1.6;
    margin-bottom:24px
}
.privacy-note svg {
    width:18px;
    height:18px;
    margin-top:3px;
    color:var(--rose)
}
.saving-status:empty,.copy-status:empty {
    display:none
}
.saving-status,.copy-status {
    font-size:17px;
    margin:12px 0;
    color:var(--green);
    font-weight:700
}
.personal-signoff {
    text-align:center;
    color:var(--muted);
    font-size:18px;
    margin:35px 0
}
.personal-signoff span {
    display:block;
    font-family:Georgia,serif;
    font-size:28px;
    color:var(--rose);
    margin-top:3px
}
.personal-signoff svg {
    margin-top:15px;
    color:var(--pink);
    width:20px;
    height:20px
}
.site-footer {
    border-top:1px solid var(--line);
    display:flex;
    justify-content:space-between;
    gap:18px;
    padding-top:26px;
    padding-bottom:28px;
    font-size:14px;
    color:var(--muted);
    margin-top:30px
}
.site-footer span {
    display:flex;
    gap:9px;
    align-items:center
}
.site-footer svg {
    width:16px;
    height:16px;
    color:var(--rose)
}
.site-footer a {
    color:var(--muted);
    min-height:44px;
    display:flex;
    align-items:center
}
.site-footer>span {
    min-height:44px
}
.text-link {
    display:inline-flex;
    align-items:center;
    gap:8px;
    min-height:48px;
    font-size:17px;
    font-weight:700
}
.text-link svg {
    width:20px;
    height:20px
}
.notice {
    display:flex;
    gap:14px;
    border-radius:14px;
    padding:17px 21px;
    margin:20px 0;
    border:1px solid
}
.notice p {
    margin:4px 0 0
}
.notice.success {
    background:#edf8f1;
    color:var(--green);
    border-color:#b6dec8
}
.notice.error {
    background:#fff1f2;
    color:var(--red);
    border-color:#f0bac1
}
.notice svg {
    margin-top:3px
}
.honeypot {
    position:absolute;
    left:-10000px;
    top:auto;
    width:1px;
    height:1px;
    overflow:hidden
}
.closed-state,.empty-state {
    text-align:center;
    padding:34px 10px
}
.empty-state h1 {
    font-size:36px
}
.page-section {
    padding-top:34px;
    padding-bottom:40px
}
.confirmation {
    padding-top:45px;
    padding-bottom:45px;
    text-align:center
}
.confirmation h1 {
    font-family:Georgia,serif;
    font-weight:400;
    font-size:46px
}
.confirmation-symbol {
    width:80px;
    height:80px;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    border-radius:50%;
    background:var(--blush);
    color:var(--rose);
    margin:8px 0 25px
}
.confirmation-symbol svg {
    width:38px;
    height:38px
}
.confirmation-symbol.positive {
    background:#edf8f1;
    color:var(--green)
}
.confirmation-details {
    text-align:left;
    background:var(--background);
    border-radius:16px;
    padding:24px;
    margin:28px 0;
    display:grid;
    gap:16px
}
.confirmation-details>div {
    display:grid;
    grid-template-columns:135px 1fr;
    gap:18px
}
.confirmation-details dt {
    color:var(--muted);
    font-size:16px
}
.confirmation-details dd {
    margin:0;
    font-size:18px;
    font-weight:700;
    overflow-wrap:anywhere
}
.link-box {
    padding:27px;
    border:1px dashed #d9afc3;
    border-radius:16px;
    text-align:left;
    margin-bottom:15px
}
.link-box h2 {
    font-size:25px
}
.link-box p {
    font-size:17px
}
.link-box label {
    font-size:16px
}
.withdrawal {
    margin-top:24px
}
.withdrawal summary,details summary {
    cursor:pointer;
    font-weight:800;
    min-height:52px;
    display:list-item;
    list-style-position:inside;
    padding-top:8px
}
.withdrawal p {
    margin-top:20px;
    font-size:17px
}
.checkbox {
    display:flex;
    gap:13px;
    align-items:flex-start;
    font-size:18px;
    font-weight:700;
    line-height:1.5;
    margin:16px 0 24px;
    min-height:40px
}
.checkbox input {
    width:25px;
    height:25px;
    flex-shrink:0;
    accent-color:var(--rose);
    margin-top:2px
}
.admin-body {
    background:#faf6f9
}
.admin-nav {
    display:flex;
    gap:8px;
    padding-bottom:20px;
    border-bottom:1px solid var(--line);
    flex-wrap:wrap;
    align-items:center
}
.admin-nav>a,.nav-logout {
    min-height:52px;
    border-radius:12px;
    padding:11px 21px;
    color:var(--muted);
    font-size:17px;
    font-weight:800;
    text-decoration:none;
    display:flex;
    align-items:center;
    border:0;
    background:transparent
}
.admin-nav>a:hover,.admin-nav>a[aria-current=page] {
    background:var(--blush);
    color:var(--rose)
}
.admin-nav form {
    margin-left:auto
}
.nav-logout:hover {
    color:var(--red);
    background:#fff1f2
}
.page-heading {
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:28px;
    margin-bottom:32px
}
.page-heading p:last-child {
    margin-bottom:0;
    color:var(--muted);
    max-width:700px
}
.page-heading .eyebrow {
    margin-bottom:12px
}
.page-heading h1 {
    font-size:42px;
    margin-bottom:14px
}
.page-heading>.button {
    flex-shrink:0;
    font-size:17px
}
.stats-grid {
    display:grid;
    grid-template-columns:repeat(4,1fr);
    gap:17px;
    margin-bottom:30px
}
.stat-card {
    background:white;
    border:1px solid var(--line);
    border-radius:20px;
    padding:24px;
    box-shadow:var(--shadow)
}
.stat-card .icon-disc {
    width:44px;
    height:44px;
    margin-bottom:13px
}
.stat-card p {
    font-size:16px;
    color:var(--muted);
    margin-bottom:5px
}
.stat-card>strong {
    display:block;
    font-size:34px;
    line-height:1.4
}
.stat-card strong small {
    font-size:14px;
    font-weight:700
}
.stat-card>small {
    display:block;
    color:var(--muted);
    font-size:13px;
    line-height:1.6;
    margin-top:6px
}
.stat-card .open-stat {
    font-size:19px
}
.green {
    background:#edf8f1;
    color:var(--green)
}
.list-heading {
    display:flex;
    justify-content:space-between;
    align-items:center;
    gap:20px;
    margin-bottom:22px
}
.list-heading h2 {
    margin:0;
    font-size:27px
}
.list-heading .button {
    font-size:15px;
    padding:12px 17px
}
.guest-list {
    padding:28px
}
.filters {
    display:grid;
    grid-template-columns:1.4fr .8fr 1.2fr auto;
    gap:14px;
    align-items:end;
    padding-bottom:20px;
    border-bottom:1px solid var(--line);
    margin-bottom:8px
}
.filters .field {
    margin:0
}
.filters label {
    font-size:15px
}
.filters input,.filters select {
    font-size:16px;
    padding:13px 12px
}
.filters button {
    font-size:16px
}
.guests-table {
    width:100%;
    border-collapse:collapse;
    text-align:left;
    font-size:15px;
    table-layout:fixed
}
.guests-table th {
    color:var(--muted);
    font-weight:700;
    padding:18px 9px;
    font-size:13px
}
.guests-table th:first-child {
    width:20%
}
.guests-table th:nth-child(2) {
    width:14%
}
.guests-table th:nth-child(3) {
    width:9%
}
.guests-table th:nth-child(4) {
    width:23%
}
.guests-table th:nth-child(5) {
    width:18%
}
.guests-table th:last-child {
    width:16%
}
.guests-table td {
    padding:20px 9px;
    border-top:1px solid var(--line);
    vertical-align:top;
    overflow-wrap:anywhere
}
.guests-table td strong {
    font-size:17px
}
.source-label {
    display:block;
    font-size:12px;
    color:var(--muted);
    margin-top:6px
}
.duplicate {
    display:block;
    font-size:12px;
    color:#815513;
    margin-top:7px
}
.badge {
    padding:5px 9px;
    display:inline-block;
    border-radius:8px;
    font-size:13px;
    font-weight:800;
    white-space:nowrap
}
.accepted {
    background:#edf8f1;
    color:var(--green)
}
.declined {
    background:#fff1f2;
    color:var(--red)
}
.muted {
    color:var(--muted)
}
.row-actions {
    display:flex;
    flex-direction:column;
    align-items:flex-start;
    gap:4px
}
.row-actions a {
    display:flex;
    align-items:center;
    min-height:38px;
    font-weight:700;
    font-size:14px
}
.row-actions .delete-link {
    color:var(--red)
}
.message-cell {
    white-space:normal
}
.login-section {
    max-width:620px;
    padding-top:40px;
    padding-bottom:50px
}
.login-section .panel {
    padding:40px
}
.login-section h1 {
    font-size:35px
}
.login-section>div>p {
    color:var(--muted)
}
.login-section .eyebrow {
    font-size:12px
}
.password-toggle {
    border:0;
    background:none;
    padding:0;
    font-size:15px;
    margin-top:5px
}
.settings-section {
    max-width:1030px
}
.settings-section .panel {
    margin-bottom:25px
}
.settings-grid {
    display:grid;
    grid-template-columns:1fr 1fr;
    gap:0 28px
}
.settings-image {
    width:200px;
    height:150px;
    object-fit:cover;
    border-radius:12px;
    margin:15px 0
}
.data-cleanup {
    margin-top:40px
}
.data-cleanup p {
    font-size:17px
}
.invitation-grid {
    display:grid;
    grid-template-columns:1.2fr 1fr;
    gap:28px
}
.invitation-grid h2 {
    font-size:27px
}
.invitation-grid p {
    font-size:17px
}
.invitation-grid label {
    font-size:17px
}
.share-buttons {
    display:flex;
    flex-direction:column;
    gap:14px;
    margin-top:18px;
    margin-bottom:24px
}
.share-preview {
    overflow-wrap:anywhere;
    margin-top:15px;
    color:var(--muted)
}
.qr-panel {
    text-align:center
}
.qr-image {
    width:280px;
    max-width:100%;
    margin:10px auto 24px;
    background:white
}
.qr-panel .button+.button {
    margin-top:15px
}
.qr-panel .field-hint {
    margin-top:20px
}
.print-controls {
    display:flex;
    gap:15px;
    margin-top:25px
}
.print-invitation {
    max-width:760px;
    margin:35px auto;
    background:white;
    padding:55px 65px;
    text-align:center;
    border:1px solid var(--line);
    border-radius:24px
}
.print-invitation h1 {
    font-family:Georgia,serif;
    font-weight:400;
    font-size:52px
}
.print-invitation h2 {
    font-size:24px
}
.print-flower {
    color:var(--rose);
    display:block;
    margin:0 auto 22px
}
.print-flower svg {
    width:45px;
    height:45px
}
.print-invitation .qr-image {
    width:240px
}
.print-event {
    padding:18px 0;
    border-top:1px solid var(--line);
    margin-top:20px
}
.print-event p {
    margin:10px 0
}
.print-url {
    overflow-wrap:anywhere;
    font-size:15px
}
.skip-link {
    position:fixed;
    z-index:20;
    left:15px;
    top:-100px;
    background:white;
    padding:15px;
    border-radius:12px
}
.skip-link:focus {
    top:15px
}
.sr-only {
    position:absolute;
    width:1px;
    height:1px;
    padding:0;
    margin:-1px;
    overflow:hidden;
    clip:rect(0,0,0,0);
    white-space:nowrap;
    border:0
}
@media(max-width:1000px) {
    .hero {
        gap:25px
    }
    .stats-grid {
        grid-template-columns:repeat(2,1fr)
    }
    .guests-table,.guests-table tbody {
        display:block
    }
    .guests-table thead {
        display:none
    }
    .guests-table tr {
        display:grid;
        grid-template-columns:1fr 1fr;
        gap:10px 20px;
        border:1px solid var(--line);
        border-radius:16px;
        margin-top:18px;
        padding:22px
    }
    .guests-table td {
        display:block;
        padding:0;
        border:0;
        font-size:17px
    }
    .guests-table td:before {
        content:attr(data-label);
        display:block;
        color:var(--muted);
        font-size:13px;
        margin-bottom:4px
    }
    .guests-table td:first-child {
        grid-column:1/-1
    }
    .guests-table td:first-child strong {
        font-size:21px
    }
    .guests-table td:nth-child(4) {
        grid-column:1/-1
    }
    .row-actions {
        flex-direction:row;
        gap:22px
    }
    .row-actions a {
        font-size:16px;
        min-height:48px
    }
    .filters {
        grid-template-columns:1fr 1fr
    }
    .filters .field:first-child {
        grid-column:1/-1
    }
    .filters .button {
        grid-column:1/-1
    }
    .invitation-grid {
        gap:20px
    }
    .invitation-grid .panel {
        padding:28px
    }
}
@media(max-width:700px) {
    body {
        font-size:18px
    }
    .container {
        padding-left:20px;
        padding-right:20px
    }
    .site-header {
        padding-top:18px;
        padding-bottom:18px
    }
    .brand {
        font-size:22px
    }
    .brand small {
        font-size:11px
    }
    .brand-icon {
        width:42px;
        height:42px
    }
    .header-link {
        font-size:14px;
        max-width:112px;
        line-height:1.35;
        gap:5px
    }
    .header-link svg {
        width:18px
    }
    .hero {
        grid-template-columns:1fr;
        gap:18px;
        padding-top:35px;
        padding-bottom:35px;
        text-align:center
    }
    .hero h1 {
        font-size:57px;
        max-width:500px;
        margin:0 auto
    }
    .eyebrow {
        font-size:12px;
        letter-spacing:.12em
    }
    .hero-rule {
        justify-content:center;
        margin:23px 0
    }
    .invitation-text {
        font-size:19px;
        line-height:1.75;
        max-width:540px;
        margin:0 auto 25px
    }
    .hero-art {
        max-width:430px;
        margin:0 auto;
        width:100%
    }
    .hero-art>img {
        max-width:365px
    }
    .art-caption {
        padding:15px 20px;
        bottom:4px
    }
    .art-caption strong {
        font-size:25px
    }
    .event-info {
        grid-template-columns:1fr;
        gap:14px
    }
    .info-card {
        padding:23px 24px;
        position:relative;
        padding-left:91px;
        min-height:142px
    }
    .info-card .icon-disc {
        position:absolute;
        left:23px;
        top:25px;
        width:46px;
        height:46px
    }
    .info-card h2 {
        font-size:21px
    }
    .info-card strong {
        font-size:19px
    }
    .registration-section {
        padding-top:54px
    }
    .section-intro h2 {
        font-size:42px
    }
    .section-intro p br {
        display:none
    }
    .panel {
        padding:25px 22px;
        border-radius:20px
    }
    .attendance-options {
        grid-template-columns:1fr;
        gap:13px
    }
    .choice-content {
        padding:20px 50px 20px 20px
    }
    .choice-content strong {
        font-size:19px
    }
    .choice-content>span:last-child {
        font-size:15px
    }
    .choice-icon {
        width:42px;
        height:42px;
        border-radius:12px
    }
    .choice>input {
        top:26px;
        right:20px;
        width:24px;
        height:24px
    }
    label,legend {
        font-size:18px
    }
    .required-note {
        font-size:13px
    }
    .field {
        margin-bottom:26px
    }
    .personal-signoff span {
        font-size:26px
    }
    .site-footer {
        flex-direction:column;
        align-items:center;
        text-align:center;
        gap:0;
        font-size:13px
    }
    .page-heading {
        align-items:flex-start;
        flex-direction:column;
        gap:22px
    }
    .page-heading h1 {
        font-size:34px
    }
    .page-heading>.button {
        width:100%
    }
    .admin-nav {
        gap:6px
    }
    .admin-nav>a,.nav-logout {
        padding:10px 12px;
        font-size:15px;
        min-height:52px
    }
    .admin-nav form {
        margin-left:0
    }
    .stats-grid {
        gap:12px
    }
    .stat-card {
        padding:19px 17px;
        border-radius:17px
    }
    .stat-card p {
        font-size:14px
    }
    .stat-card>strong {
        font-size:30px
    }
    .stat-card strong small {
        display:block;
        font-size:13px
    }
    .stat-card .open-stat {
        font-size:17px
    }
    .stat-card>small {
        font-size:12px
    }
    .guest-list {
        padding:22px 17px
    }
    .list-heading {
        align-items:flex-start;
        flex-direction:column
    }
    .list-heading .button {
        width:100%;
        font-size:16px
    }
    .filters {
        gap:16px 10px
    }
    .filters select {
        font-size:14px;
        padding:13px 8px
    }
    .guests-table tr {
        padding:20px 17px;
        gap:15px
    }
    .guests-table td:last-child {
        grid-column:1/-1
    }
    .settings-grid,.invitation-grid {
        grid-template-columns:1fr
    }
    .settings-section .panel {
        padding:26px 22px
    }
    .settings-section h2 {
        font-size:26px
    }
    .settings-section form>.button {
        width:100%
    }
    .login-section {
        padding-top:25px
    }
    .login-section .panel {
        padding:28px 24px
    }
    .login-section h1 {
        font-size:30px
    }
    .confirmation {
        padding-top:25px
    }
    .confirmation h1 {
        font-size:36px
    }
    .confirmation-details {
        padding:20px
    }
    .confirmation-details>div {
        grid-template-columns:1fr;
        gap:3px
    }
    .link-box {
        padding:22px 18px
    }
    .link-box h2 {
        font-size:23px
    }
    .link-box input {
        font-size:14px
    }
    .button-row {
        flex-direction:column
    }
    .button-row .button {
        width:100%
    }
    .page-section {
        padding-top:25px
    }
    .print-invitation {
        padding:30px 25px;
        margin:25px 20px
    }
    .print-invitation h1 {
        font-size:40px
    }
    .print-controls {
        flex-wrap:wrap
    }
}
@media(prefers-reduced-motion:reduce) {
    html {
        scroll-behavior:auto
    }
    *,*:before,*:after {
        transition:none!important;
        animation:none!important
    }
}
@page {
    size:A4;
    margin:15mm
}
@media print {
    body {
        background:white;
        font-size:16px
    }
    .site-header,.admin-nav,.site-footer,.print-controls,.skip-link {
        display:none!important
    }
    .print-invitation {
        max-width:none;
        margin:0;
        padding:12mm 16mm;
        border:1px solid #ddd;
        border-radius:0;
        box-shadow:none;
        break-inside:avoid
    }
    .print-invitation h1 {
        font-size:42px
    }
    .print-invitation p {
        margin-bottom:12px
    }
    .print-invitation .qr-image {
        width:50mm
    }
    .print-invitation h2 {
        font-size:20px
    }
    .print-invitation .eyebrow {
        font-size:12px
    }
    .print-event {
        padding:10px 0
    }
    .print-invitation .print-flower {
        margin-bottom:10px
    }
    a {
        color:var(--ink)
    }
}
.calendar-action {
    margin-block:24px
}
.event-schedule {
    padding-left:24px
}
.event-schedule li {
    padding:16px 8px;
    border-bottom:1px solid #ecdce3
}
.event-schedule span {
    display:block;
    margin-top:6px
}
.faq-item {
    padding:18px 0;
    border-bottom:1px solid #ecdce3
}
.faq-item summary {
    cursor:pointer;
    font-weight:bold;
    min-height:32px
}
.photo-grid {
    display:grid;
    grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));
    gap:24px
}
.photo-grid figure {
    margin:0
}
.photo-grid img {
    width:100%;
    max-height:420px;
    object-fit:contain;
    border-radius:16px
}
.photo-grid form {
    display:flex;
    gap:10px;
    flex-wrap:wrap
}
.confetti-piece {
    position:fixed;
    top:-20px;
    width:10px;
    height:16px;
    z-index:20;
    pointer-events:none;
    animation:confetti-fall 3s ease-in forwards
}
@keyframes confetti-fall {
    to {
        transform:translateY(105vh) rotate(600deg);
        opacity:0
    }
}
@media(prefers-reduced-motion:reduce) {
    .confetti-piece {
        display:none
    }
}
.page-section > .panel + .panel {
    margin-top:24px
}
.faq-item summary,.event-schedule li,.photo-grid figcaption {
    overflow-wrap:anywhere
}
/* Celebration countdown */
.countdown-section {
    padding-block:8px 16px
}
.countdown {
    position:relative;
    isolation:isolate;
    text-align:center;
    padding:44px clamp(20px,5vw,64px) 32px;
    border:1px solid #ead0dc;
    border-radius:30px;
    background:radial-gradient(ellipse at 0% 0%,#f9e0ea 0,transparent 48%),radial-gradient(ellipse at 100% 100%,#f7ead3 0,transparent 45%),#fffaf5;
    box-shadow:0 16px 48px #8a456710
}
.countdown-intro {
    position:relative;
    z-index:1
}
.countdown-kicker {
    display:flex;
    align-items:center;
    justify-content:center;
    gap:8px;
    color:var(--rose);
    font-size:12px;
    font-weight:800;
    letter-spacing:.1em;
    text-transform:uppercase;
    margin-bottom:16px
}
.countdown-kicker svg {
    width:17px;
    height:17px
}
.countdown h2 {
    font-family:Georgia,'Times New Roman',serif;
    font-weight:400;
    font-size:clamp(30px,4vw,48px);
    letter-spacing:-.035em;
    margin-bottom:12px
}
.countdown-status {
    font-size:17px;
    color:var(--muted);
    margin-bottom:28px
}
.countdown-grid {
    position:relative;
    z-index:1;
    display:grid;
    grid-template-columns:repeat(4,minmax(0,1fr));
    gap:16px;
    max-width:820px;
    margin:0 auto 26px
}
.countdown-unit {
    position:relative;
    display:flex;
    flex-direction:column;
    align-items:center;
    justify-content:center;
    min-width:0;
    min-height:146px;
    padding:20px 10px 17px;
    background:#ffffffd9;
    border:1px solid #ecd8e1;
    border-radius:20px;
    box-shadow:0 8px 20px #7e34560a
}
.countdown-unit::before {
    content:'';
    position:absolute;
    inset:50% 14px auto;
    height:1px;
    background:linear-gradient(90deg,transparent,#ecd8e160,transparent);
    pointer-events:none
}
.countdown-value {
    display:block;
    color:var(--rose);
    font-size:clamp(38px,5vw,64px);
    line-height:1.08;
    font-weight:800;
    letter-spacing:-.055em;
    font-variant-numeric:tabular-nums;
    position:relative
}
.countdown-unit.is-long .countdown-value {
    font-size:clamp(28px,4vw,48px)
}
.countdown-label {
    margin-top:12px;
    font-size:12px;
    font-weight:800;
    letter-spacing:.11em;
    text-transform:uppercase;
    color:#776270
}
.countdown-date {
    display:flex;
    align-items:center;
    justify-content:center;
    gap:10px;
    color:#725262;
    font-size:15px;
    font-weight:700;
    position:relative;
    z-index:1
}
.countdown-date svg {
    width:19px;
    height:19px
}
.countdown-date-divider {
    padding-inline:6px;
    color:#bda5b1
}
.countdown-flower {
    position:absolute;
    z-index:0;
    color:#bc6c9230;
    pointer-events:none
}
.countdown-flower svg {
    width:92px;
    height:92px;
    stroke-width:1
}
.countdown-flower-left {
    left:24px;
    top:26px;
    transform:rotate(-18deg)
}
.countdown-flower-right {
    right:24px;
    bottom:22px;
    transform:rotate(16deg)
}
.countdown.is-celebrating .countdown-status {
    font-family:Georgia,serif;
    font-size:clamp(28px,5vw,42px);
    color:var(--rose);
    margin-block:24px
}
/* Gentle motion; all content remains visible without JavaScript. */
.button,.step-button {
    transition:background .18s,border-color .18s,box-shadow .18s,transform .18s
}
.button:active,.step-button:active {
    transform:scale(.98)
}
.info-card,.stat-card,.countdown-unit {
    transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease
}
@media(hover:hover) and (pointer:fine) {
    .info-card:hover,.stat-card:hover {
        transform:translateY(-4px);
        box-shadow:0 14px 30px #8a456715
    }
    .countdown-unit:hover {
        transform:translateY(-3px);
        border-color:#d9afc3;
        box-shadow:0 12px 24px #8a456712
    }
    .button:hover {
        transform:translateY(-2px)
    }
}
/* Keep grids, long guest data and controls inside their viewport. */
.hero>* ,.event-info>* ,.stats-grid>* ,.invitation-grid>* ,.settings-grid>* ,.photo-grid>* {
    min-width:0
}
h1,h2,h3,.brand span,.info-card strong,.countdown-status,.checkbox,.notice {
    overflow-wrap:anywhere
}
.page-section>.panel {
    margin-bottom:24px
}
.photo-grid .panel {
    margin-bottom:0
}
.guests-table td>small {
    display:block;
    color:var(--muted);
    font-size:12px;
    margin-top:6px
}
@media(max-width:900px) {
    .event-info {
        gap:14px
    }
    .info-card {
        padding:24px 20px
    }
    .admin-nav {
        gap:6px
    }
    .admin-nav>a {
        padding-inline:12px
    }
}
@media(max-width:700px) {
    .countdown {
        padding:32px 20px 26px;
        border-radius:24px
    }
    .countdown-kicker {
        font-size:10px;
        letter-spacing:.06em;
        gap:6px
    }
    .countdown-kicker svg {
        width:15px;
        height:15px
    }
    .countdown-status {
        font-size:15px;
        margin-bottom:22px
    }
    .countdown-grid {
        gap:10px
    }
    .countdown-unit {
        padding:17px 6px;
        min-height:110px;
        border-radius:15px
    }
    .countdown-value {
        font-size:36px
    }
    .countdown-label {
        font-size:9px;
        letter-spacing:.05em;
        margin-top:10px
    }
    .countdown-flower svg {
        width:60px;
        height:60px
    }
    .countdown-flower-left {
        left:8px;
        top:12px
    }
    .countdown-flower-right {
        right:8px;
        bottom:12px
    }
    .countdown-date {
        font-size:13px
    }
    .info-card {
        padding:23px 24px 23px 91px
    }
    .admin-nav {
        display:grid;
        grid-template-columns:repeat(2,minmax(0,1fr));
        gap:6px;
        padding-bottom:18px
    }
    .admin-nav>a {
        display:flex;
        align-items:center;
        justify-content:center;
        min-width:0;
        text-align:center;
        line-height:1.3
    }
    .admin-nav form {
        grid-column:1/-1;
        justify-self:end
    }
    .site-header {
        gap:12px
    }
    .brand {
        min-width:0
    }
    .brand-icon {
        flex-shrink:0
    }
    .brand small {
        max-width:180px
    }
    .photo-grid form .button {
        flex:1 1 120px
    }
    .page-section>form.panel .button {
        max-width:100%
    }
    .hero h1 {
        font-size:clamp(42px,11vw,57px)
    }
}
@media(max-width:440px) {
    .countdown-grid {
        grid-template-columns:repeat(2,minmax(0,1fr));
        gap:12px;
        max-width:310px
    }
    .countdown-unit {
        min-height:118px;
        padding-block:18px
    }
    .countdown-value {
        font-size:48px
    }
    .countdown-unit.is-long .countdown-value {
        font-size:28px
    }
    .countdown-label {
        font-size:10px;
        letter-spacing:.08em
    }
    .countdown-date {
        gap:7px
    }
    .countdown-date-divider {
        padding-inline:2px
    }
    .stats-grid {
        grid-template-columns:1fr
    }
    .stat-card strong small {
        display:inline
    }
    .filters {
        grid-template-columns:1fr
    }
    .filters .field {
        grid-column:1/-1
    }
    .stepper {
        gap:10px;
        max-width:100%
    }
    .stepper>div {
        min-width:0
    }
    .stepper>div>span {
        font-size:14px
    }
    .step-button {
        min-width:48px;
        width:48px;
        height:52px
    }
    .stepper input[type=number] {
        width:62px
    }
    .guests-table tr {
        grid-template-columns:1fr
    }
    .guests-table td {
        grid-column:1/-1
    }
    .brand {
        font-size:20px
    }
    .brand small {
        max-width:135px
    }
    .header-link {
        max-width:102px;
        font-size:13px
    }
}
@media print {
    .countdown-flower {
        display:none
    }
    .countdown {
        box-shadow:none;
        background:white;
        break-inside:avoid
    }
    .countdown-grid {
        grid-template-columns:repeat(4,minmax(0,1fr))
    }
}
p {
    overflow-wrap:anywhere
}
.countdown-unit.is-long .countdown-value[data-digits="6"],.countdown-unit.is-long .countdown-value[data-digits="7"] {
    font-size:clamp(20px,3vw,36px)
}
@media(max-width:440px) {
    .countdown-unit.is-long .countdown-value[data-digits="6"],.countdown-unit.is-long .countdown-value[data-digits="7"] {
        font-size:20px
    }
}
/* Consistent, quiet interactions throughout the invitation and administration. */
.admin-nav>a,.nav-logout,.header-link,.text-link,.text-link svg,.row-actions a,.faq-item summary {
    transition:color .18s ease,background-color .18s ease,box-shadow .18s ease
}
input:not([type=radio]):not([type=checkbox]),select,textarea {
    transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease
}
input:not([type=radio]):not([type=checkbox]):focus,select:focus,textarea:focus {
    border-color:var(--rose);
    box-shadow:0 0 0 3px #b93f7510
}
.choice-content {
    transition:border-color .18s ease,background-color .18s ease,box-shadow .18s ease
}
.choice input:checked+.choice-content {
    box-shadow:0 3px 12px #b93f7508
}
@media(hover:hover) and (pointer:fine) {
    .admin-nav>a:hover,.nav-logout:hover {
        background-color:#fce7f080
    }
    .header-link:hover,.text-link:hover,.row-actions a:hover,.faq-item summary:hover {
        color:var(--rose-hover)
    }
}
@media(prefers-reduced-motion:reduce) {
    .button:hover,.button:active,.step-button:active,.info-card:hover,.stat-card:hover,.countdown-unit:hover {
        transform:none
    }
}
.header-actions {
    display:flex;
    align-items:center;
    gap:20px;
    min-width:0
}
.language-switch {
    display:flex;
    align-items:center;
    padding:4px;
    border:1px solid var(--line);
    border-radius:13px;
    background:#ffffffb3;
    gap:3px;
    flex-shrink:0
}
.language-switch a {
    display:flex;
    align-items:center;
    justify-content:center;
    min-width:44px;
    min-height:40px;
    padding:7px 9px;
    font-size:13px;
    font-weight:800;
    text-decoration:none;
    color:var(--muted);
    border-radius:9px;
    transition:background-color .18s,color .18s
}
.language-switch a[aria-current=true] {
    background:var(--blush);
    color:var(--rose)
}
.inline-rsvp {
    display:flex;
    align-items:center;
    justify-content:center;
    gap:24px;
    margin-block:20px 36px
}
.inline-rsvp p {
    margin:0;
    color:var(--muted);
    font-size:16px
}
.to-top {
    position:fixed;
    right:24px;
    bottom:24px;
    z-index:11;
    display:none;
    width:52px;
    height:52px;
    border-radius:16px;
    border:1px solid #dfb9cc;
    background:#fffafc;
    color:var(--rose);
    box-shadow:0 6px 22px #63334918;
    align-items:center;
    justify-content:center;
    transition:background-color .18s,box-shadow .18s
}
@media(min-width:768px) {
    .to-top {
        display:flex
    }
    .to-top:hover {
        background:var(--blush);
        box-shadow:0 8px 26px #63334922
    }
}
@media(max-width:700px) {
    .site-header {
        flex-wrap:wrap;
        align-items:flex-start
    }
    .header-actions {
        margin-left:auto;
        flex-direction:column;
        align-items:flex-end;
        gap:7px
    }
    .header-link {
        max-width:none;
        min-height:40px
    }
    .language-switch {
        padding:2px
    }
    .language-switch a {
        min-height:38px;
        min-width:40px;
        font-size:12px
    }
    .inline-rsvp {
        flex-direction:column;
        gap:14px;
        text-align:center
    }
    .inline-rsvp .button {
        width:100%;
        max-width:360px
    }
}
@media(max-width:350px) {
    .site-header {
        gap:8px
    }
    .brand small {
        max-width:110px
    }
    .header-link {
        font-size:12px
    }
    .language-switch a {
        min-width:38px
    }
    .header-actions {
        gap:4px
    }
}
@media print {
    .language-switch,.to-top {
        display:none!important
    }
}
.upload-dropzone {
    position:relative;
    border:2px dashed #d8adc1;
    border-radius:20px;
    padding:30px 20px;
    text-align:center;
    background:#fff9fc;
    transition:border-color .18s,background-color .18s
}
.upload-dropzone.is-dragging {
    background:#fce7f0;
    border-color:var(--rose)
}
.upload-dropzone h3 {
    font-size:24px;
    margin-bottom:10px
}
.upload-dropzone p {
    font-size:16px
}
.upload-dropzone .field {
    margin-bottom:12px
}
.upload-dropzone .button {
    display:inline-flex;
    cursor:pointer
}
.upload-file-input {
    position:absolute;
    left:50%;
    bottom:80px;
    width:1px!important;
    height:1px!important;
    min-height:1px!important;
    padding:0!important;
    opacity:0;
    border:0!important
}
.upload-dropzone:focus-within {
    outline:3px solid #703f91;
    outline-offset:4px
}
.upload-folder {
    border:0;
    background:transparent;
    padding:10px 15px;
    color:var(--rose);
    font-weight:700;
    min-height:44px;
    font-size:16px;
    text-decoration:underline;
    text-underline-offset:4px
}
.upload-selection {
    list-style:none;
    padding:0;
    margin:24px 0
}
.upload-selection:empty {
    display:none
}
.upload-selection li {
    display:flex;
    align-items:center;
    gap:12px;
    padding:12px 0;
    border-bottom:1px solid var(--line)
}
.upload-selection img {
    width:56px;
    height:56px;
    border-radius:10px;
    object-fit:cover;
    flex-shrink:0
}
.upload-selection li>div {
    flex:1;
    min-width:0
}
.upload-selection strong {
    display:block;
    overflow-wrap:anywhere;
    font-size:15px
}
.upload-selection small {
    display:block;
    color:var(--muted);
    overflow-wrap:anywhere;
    font-size:13px
}
.upload-remove {
    border:1px solid var(--line);
    border-radius:9px;
    background:white;
    color:var(--rose);
    padding:8px;
    min-height:44px;
    font-size:13px;
    flex-shrink:0
}
.upload-status {
    font-size:16px;
    color:var(--muted);
    overflow-wrap:anywhere
}
.upload-status:empty {
    display:none
}
.upload-progress {
    width:100%;
    height:14px;
    accent-color:var(--rose);
    margin-bottom:24px
}
.gallery-upload {
    margin-top:28px
}
@media(max-width:700px) {
    .upload-folder {
        display:none
    }
    .upload-dropzone {
        padding:24px 15px
    }
    .upload-dropzone h3 {
        font-size:22px
    }
    .gallery-upload>.button {
        width:100%
    }
    .upload-selection li {
        flex-wrap:wrap
    }
    .upload-selection li>div {
        flex-basis:calc(100% - 68px)
    }
    .upload-remove {
        margin-left:auto
    }
}
