:root{--pink:#ff6fae;--pink2:#ff97c4;--deep:#6c2a4e;--soft:#fff4f8;--line:#f6cfdf;--muted:#8b6377;--shadow:#ff6fae26}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",Arial,sans-serif;color:var(--deep);background:radial-gradient(circle at top left,#ffe5f0 0,#fff8fb 36%,#fff 72%);min-height:100vh}.page{width:min(1080px,92vw);margin:0 auto;padding:42px 0 20px}.hero{position:relative;overflow:hidden;text-align:center;padding:70px 20px 58px;border-radius:34px;background:linear-gradient(135deg,#fff8fb,#fff0f7 55%,#f8f1ff);border:1px solid #ffe0ec;box-shadow:0 28px 80px var(--shadow)}.glow{position:absolute;width:240px;height:240px;border-radius:999px;filter:blur(18px);opacity:.34}.glow-one{left:-80px;top:-70px;background:#ff8fbd}.glow-two{right:-80px;bottom:-80px;background:#bda7ff}.tag{display:inline-flex;align-items:center;justify-content:center;gap:8px;margin:0 0 16px;padding:7px 14px;border-radius:999px;background:white;border:1px solid var(--line);color:var(--pink);font-weight:800;font-size:13px;letter-spacing:.08em;text-transform:uppercase}.small-tag{font-size:12px;margin-bottom:10px}.name-stack{position:relative;z-index:1;margin:0;font-size:clamp(38px,8vw,84px);line-height:1.05;font-weight:900;letter-spacing:.03em}.name-stack span{display:block}.heart-line{font-size:.55em;color:var(--pink);margin:10px 0;animation:pulse 1.5s infinite}.sub{position:relative;z-index:1;max-width:680px;margin:24px auto 0;font-size:18px;line-height:1.8;color:var(--muted)}.hero-actions{margin-top:28px;display:flex;justify-content:center;gap:14px;flex-wrap:wrap}.btn{border:0;border-radius:999px;background:linear-gradient(135deg,var(--pink),var(--pink2));color:white;padding:13px 24px;font-weight:900;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 10px 28px #ff6fae42}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-ghost{background:white;color:var(--pink);border:1px solid var(--line);box-shadow:none}.counter-card,.quote-card,.letter,.message-board,.anniversary{margin-top:22px;border-radius:30px;background:rgba(255,255,255,.86);border:1px solid #ffe0ec;box-shadow:0 20px 70px #ff6fae1c;padding:28px}.counter-card{display:grid;grid-template-columns:1fr 1fr;gap:20px}.counter-card>div{border-radius:24px;background:var(--soft);padding:24px;text-align:center}.label{display:block;color:var(--muted);font-weight:800;margin-bottom:10px}.counter-card strong{display:block;font-size:clamp(34px,7vw,62px);color:var(--pink);line-height:1}.counter-card small{display:block;color:var(--muted);margin-top:8px}.counter-tip{grid-column:1/-1;margin:0;text-align:center;color:var(--muted);font-size:14px}.quote-card{text-align:center}.quote-card h2{font-size:clamp(24px,4vw,42px);line-height:1.35;margin:6px 0}.letter h2,.board-head h2{font-size:32px;margin:0 0 12px}.letter p,.board-head p{color:var(--muted);line-height:1.8}.letter-line{padding:16px 18px;margin:12px 0;border-radius:18px;background:linear-gradient(135deg,#fff7fb,#fff);border:1px solid #ffe4ef}.anniversary-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:16px;margin-top:18px}.anniversary-item{display:flex;align-items:center;gap:14px;overflow:hidden;border-radius:22px;background:#fff;border:1px solid var(--line);box-shadow:0 12px 34px #ff6fae18;padding:14px}.anniversary-item img{width:92px;height:92px;flex:0 0 92px;object-fit:cover;display:block;background:#fff4f8;border-radius:16px}.anniversary-body{min-width:0;flex:1;padding:0}.anniversary-date{display:inline-block;margin-bottom:8px;padding:5px 10px;border-radius:999px;background:var(--soft);color:var(--pink);font-weight:900;font-size:13px}.anniversary-title{margin:0 0 8px;font-size:20px}.anniversary-desc{margin:0;color:var(--muted);line-height:1.7;white-space:pre-wrap}.message-form{display:grid;gap:14px;margin-top:18px}.signer-choice{display:grid;grid-template-columns:1fr 1fr;gap:12px}.signer-card{position:relative;display:flex;align-items:center;justify-content:center;gap:10px;border:1px solid var(--line);border-radius:18px;background:#fff;padding:14px 16px;font-weight:900;cursor:pointer;color:var(--deep)}.signer-card input{position:absolute;opacity:0;pointer-events:none}.dot{width:14px;height:14px;border-radius:50%;border:2px solid #f0adc7;background:#fff;box-shadow:inset 0 0 0 3px #fff}.signer-card:has(input:checked){border-color:var(--pink);background:linear-gradient(135deg,#fff3f8,#fff);box-shadow:0 8px 24px #ff6fae1f;color:var(--pink)}.signer-card:has(input:checked) .dot{background:var(--pink);border-color:var(--pink)}textarea,input{width:100%;border:1px solid var(--line);border-radius:18px;padding:14px 16px;font:inherit;color:var(--deep);background:white}textarea{min-height:132px;resize:vertical}.trap{position:absolute;left:-9999px;opacity:0}.form-foot{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}.form-foot small{color:var(--muted)}.messages{display:grid;gap:12px;margin-top:18px}.message-item{padding:16px 18px;border-radius:18px;background:#fff;border:1px solid var(--line)}.message-item header{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:8px}.message-item b{color:var(--pink)}.message-item time{font-size:12px;color:var(--muted)}.message-item p{margin:0;line-height:1.75;white-space:pre-wrap}.empty-note{padding:18px;border-radius:18px;background:var(--soft);color:var(--muted);text-align:center}footer{text-align:center;color:var(--muted);padding:22px}footer a{color:var(--pink);text-decoration:none;font-weight:800}@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.14)}}@media(max-width:720px){.page{width:min(100% - 24px,680px);padding-top:20px}.hero{padding:42px 14px}.name-stack{font-size:42px}.heart-line{font-size:30px;margin:8px 0}.sub{font-size:15px}.counter-card{grid-template-columns:1fr;padding:18px}.counter-card>div{padding:20px}.letter,.message-board,.quote-card,.anniversary{padding:20px;border-radius:24px}.letter h2,.board-head h2{font-size:25px}.signer-choice{grid-template-columns:1fr}.form-foot{display:block}.form-foot .btn{width:100%;margin-top:12px}.message-item header{display:block}.message-item time{display:block;margin-top:4px}.anniversary-list{grid-template-columns:1fr}.anniversary-item{align-items:flex-start}.anniversary-item img{width:80px;height:80px;flex-basis:80px}}
footer{display:flex;align-items:center;justify-content:center;gap:8px}.footer-gear{font-size:18px;line-height:1;text-decoration:none;color:var(--pink);display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;background:#fff;border:1px solid var(--line);box-shadow:0 6px 18px #ff6fae22}.footer-gear:hover{transform:rotate(18deg);background:var(--soft)}

.anniversary-photo{appearance:none;border:0;background:transparent;padding:0;margin:0;cursor:zoom-in;display:block;flex:0 0 92px;border-radius:16px;overflow:hidden}.anniversary-photo img{transition:transform .22s ease}.anniversary-photo:hover img{transform:scale(1.04)}.photo-modal{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;padding:22px;opacity:0;pointer-events:none;transition:opacity .18s ease}.photo-modal.is-open{opacity:1;pointer-events:auto}.photo-modal-backdrop{position:absolute;inset:0;background:rgba(38,13,30,.72);backdrop-filter:blur(8px)}.photo-modal-card{position:relative;z-index:1;margin:0;width:min(92vw,900px);max-height:90vh;border-radius:24px;background:#fff;padding:14px;box-shadow:0 30px 90px rgba(0,0,0,.35)}.photo-modal-card img{display:block;width:100%;max-height:76vh;object-fit:contain;border-radius:18px;background:#fff4f8}.photo-modal-card figcaption{text-align:center;color:var(--muted);font-weight:800;padding:10px 8px 2px}.photo-modal-close{position:absolute;right:-10px;top:-10px;width:38px;height:38px;border-radius:999px;border:1px solid var(--line);background:#fff;color:var(--pink);font-size:28px;line-height:34px;cursor:pointer;box-shadow:0 10px 30px #0002}body.modal-open{overflow:hidden}.anniversary-desc{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
@media(max-width:720px){body{background:linear-gradient(180deg,#fff4f8 0,#fff 48%,#fff8fb 100%)}.page{width:100%;padding:14px 12px 18px}.hero{border-radius:26px;padding:34px 14px 30px}.tag{font-size:11px;padding:6px 10px;margin-bottom:12px}.name-stack{font-size:40px;letter-spacing:.02em}.heart-line{font-size:28px;margin:6px 0}.sub{font-size:14px;line-height:1.65;margin-top:16px}.hero-actions{gap:10px;margin-top:18px}.hero-actions .btn{width:100%;padding:12px 16px}.counter-card,.quote-card,.letter,.message-board,.anniversary{margin-top:14px;border-radius:22px;padding:16px;box-shadow:0 12px 42px #ff6fae18}.counter-card{grid-template-columns:1fr 1fr;gap:10px}.counter-card>div{border-radius:18px;padding:16px 8px}.counter-card strong{font-size:clamp(28px,9vw,42px);word-break:break-all}.counter-card small{font-size:12px}.counter-tip{font-size:13px}.quote-card h2{font-size:24px}.letter h2,.board-head h2{font-size:24px}.board-head p,.letter p{font-size:14px;line-height:1.7}.anniversary-list{grid-template-columns:1fr;gap:10px;margin-top:12px}.anniversary-item{display:grid;grid-template-columns:78px minmax(0,1fr);gap:10px;align-items:center;border-radius:18px;padding:10px}.anniversary-photo{width:78px;height:78px;flex-basis:78px}.anniversary-item img{width:78px!important;height:78px!important;border-radius:14px}.anniversary-date{font-size:11px;margin-bottom:5px;padding:4px 8px}.anniversary-title{font-size:16px;margin-bottom:4px;line-height:1.25}.anniversary-desc{font-size:13px;line-height:1.5;-webkit-line-clamp:2}.message-form{gap:10px}.signer-card{padding:12px}.photo-modal{padding:10px}.photo-modal-card{width:96vw;border-radius:20px;padding:10px}.photo-modal-card img{max-height:76vh;border-radius:15px}.photo-modal-close{right:6px;top:6px;background:rgba(255,255,255,.92)}}@media(max-width:390px){.counter-card{grid-template-columns:1fr}.name-stack{font-size:36px}.anniversary-item{grid-template-columns:72px minmax(0,1fr)}.anniversary-photo,.anniversary-item img{width:72px!important;height:72px!important}.anniversary-title{font-size:15px}}

/* codex-mobile-polish-20260523e */


/* codex-anniversary-front-20260523i */
.board-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.board-top h2{margin:0}.anniversary-add-btn{padding:10px 16px;font-size:14px;box-shadow:0 8px 22px #ff6fae22}.counter-card>div{min-width:0}.counter-card strong{white-space:nowrap;word-break:normal;overflow-wrap:normal;font-variant-numeric:tabular-nums}#clock{font-size:clamp(26px,5.8vw,54px);letter-spacing:-.04em}
.anniversary-upload-modal{position:fixed;inset:0;z-index:10000;display:flex;align-items:center;justify-content:center;padding:16px;opacity:0;pointer-events:none;transition:.18s}.anniversary-upload-modal.is-open{opacity:1;pointer-events:auto}.anniversary-upload-backdrop{position:absolute;inset:0;background:rgba(38,13,30,.66);backdrop-filter:blur(8px)}
.anniversary-upload-card{position:relative;z-index:1;width:min(94vw,520px);max-height:90vh;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:24px;padding:22px;box-shadow:0 28px 80px #0003}.anniversary-upload-card h3{margin:0 0 8px;font-size:24px}.anniversary-upload-card label{display:block;font-weight:800;margin-top:12px}.anniversary-upload-card input,.anniversary-upload-card textarea{margin-top:7px}
.anniversary-upload-close{position:absolute;right:12px;top:10px;border:0;background:#fff;color:var(--pink);font-size:28px;cursor:pointer}.anniversary-upload-hint{margin:0;color:var(--muted);line-height:1.6}@media(max-width:720px){.board-top{align-items:center;flex-wrap:nowrap}.board-top h2{font-size:23px}.anniversary-add-btn{padding:8px 12px;font-size:13px;white-space:nowrap}.counter-card{grid-template-columns:1fr 1fr!important;gap:8px!important}.counter-card>div{padding:14px 6px!important}#clock{font-size:clamp(22px,6.2vw,32px)!important}.counter-card small{font-size:11px!important;white-space:nowrap}}

.quote-card{position:relative;overflow:hidden;padding:34px 30px}.quote-card .tag{font-size:18px;letter-spacing:.04em;padding:10px 20px;margin-bottom:14px;box-shadow:0 10px 28px #ff6fae20}.quote-card h2{font-size:clamp(28px,5vw,50px);font-weight:900}
.auth-heart{width:54px;height:54px;margin:0 auto 12px;border-radius:50%;display:grid;place-items:center;color:#fff;background:linear-gradient(135deg,var(--pink),var(--pink2));box-shadow:0 14px 34px #ff6fae44;font-size:26px}.anniversary-delete-btn{border:0;border-radius:999px;background:#fff1f2;color:#be123c;border:1px solid #fecdd3;padding:7px 12px;font-weight:900;cursor:pointer;white-space:nowrap}
.anniversary-no-photo{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center}.anniversary-no-photo .anniversary-body{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:center}.anniversary-no-photo .anniversary-date{margin:0;white-space:nowrap}.anniversary-no-photo .anniversary-title{margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.anniversary-no-photo .anniversary-desc{grid-column:1/-1}
@media(max-width:720px){.quote-card{padding:24px 18px}.quote-card .tag{font-size:16px;padding:9px 16px}.quote-card h2{font-size:30px}.anniversary-no-photo{grid-template-columns:1fr auto!important}.anniversary-no-photo .anniversary-body{grid-template-columns:auto minmax(0,1fr)}.anniversary-delete-btn{padding:6px 10px;font-size:12px}}
.anniversary-date{white-space:nowrap}.anniversary-item{min-width:0}.anniversary-body{min-width:0}

/* codex-file-upload-polish-20260523l */
.anniversary-upload-card input[type=file]{padding:10px;background:linear-gradient(135deg,#fff7fb,#fff);border:1px dashed #f3a8c8;cursor:pointer;color:var(--muted)}.anniversary-upload-card input[type=file]::file-selector-button{border:0;border-radius:999px;background:linear-gradient(135deg,var(--pink),var(--pink2));color:#fff;padding:9px 16px;margin-right:12px;font-weight:900;cursor:pointer;box-shadow:0 8px 20px #ff6fae33}.anniversary-upload-card input[type=file]::file-selector-button:hover{filter:brightness(1.04)}

/* codex-anniversary-logout-20260523m */
.anniversary-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.anniversary-lock-btn{padding:10px 16px;font-size:14px;color:#be123c;border-color:#fecdd3;background:#fff7f8}.anniversary-lock-btn[hidden]{display:none!important}@media(max-width:720px){.anniversary-actions{gap:8px;flex-wrap:nowrap}.anniversary-lock-btn{padding:8px 12px;font-size:13px;white-space:nowrap}}
