@import "https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;1,300;1,400;1,500;1,600&family=Cormorant+SC:wght@400;500;600&display=swap";*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--paper:#fdfaf4;--letter:#fffef9;--ink:#3a3226;--faded-ink:#5e5347;--wax:#7d2f2f;--wax-dark:#5a1f1f;--gold:#c8a96a;--gold-text:#7a5c1e;--rule:#dcd2bd;--font:"Cormorant Garamond", Georgia, "Times New Roman", serif;--font-sc:"Cormorant SC", "Cormorant Garamond", Georgia, serif}html,body{height:100%}body{font-family:var(--font);background-color:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#root{background:0 0;border:none;width:100%;max-width:none;min-height:100%;margin:0}.floral-bg{pointer-events:none;z-index:0;mix-blend-mode:multiply;width:100%;height:100%;position:fixed;inset:0}@media (width<=640px){.floral-bg{opacity:.45}}.app-wrapper{z-index:1;background-color:#0000;flex-direction:column;align-items:center;min-height:100vh;padding:2.5rem 1rem 5rem;display:flex;position:relative}.masthead{text-align:center;margin-bottom:3rem}.masthead__eyebrow{font-family:var(--font-sc);letter-spacing:.3em;color:var(--gold-text);margin-bottom:.6rem;font-size:.68rem}.masthead__title{font-family:var(--font);color:#fff;-webkit-text-stroke:5px var(--ink);paint-order:stroke fill;letter-spacing:.03em;font-size:1.85rem;font-style:italic;font-weight:600}.masthead__rule{background:var(--gold);opacity:.4;width:56px;height:1px;margin:.85rem auto 0}.letter-canvas{width:100%;max-width:600px;animation:.7s both pageEnter}.letter-card--shake{animation:.55s cardShake}.letter-card{background:var(--letter);border:1px solid #dcd2bdb3;padding:3rem 3rem 2.5rem;position:relative;box-shadow:0 1px 2px #3a32260a,0 4px 16px #3a322612,0 16px 48px #3a32260d}@media (width<=560px){.letter-card{padding:2rem 1.5rem}.masthead__title{font-size:1.5rem}}.letter-lines{background-image:repeating-linear-gradient(to bottom, transparent, transparent calc(1.9rem - 1px), var(--rule) calc(1.9rem - 1px), var(--rule) 1.9rem);background-size:100% 1.9rem;padding-bottom:1.9rem}.letter-salutation{font-family:var(--font);color:var(--ink);-webkit-user-select:none;user-select:none;pointer-events:none;font-size:1.2rem;font-style:italic;font-weight:400;line-height:1.9rem}.letter-textarea{resize:none;width:100%;min-height:280px;font-family:var(--font);color:var(--ink);caret-color:var(--wax);background:0 0;border:none;outline:none;padding:0;font-size:1.15rem;font-style:italic;font-weight:400;line-height:1.9rem;display:block}.letter-textarea::placeholder{color:var(--faded-ink);font-style:italic}.letter-footer{border-top:1px solid var(--rule);justify-content:space-between;align-items:center;gap:1rem;margin-top:2rem;padding-top:1.25rem;display:flex}.letter-footer__user,.letter-footer__hint{font-family:var(--font);color:var(--faded-ink);font-size:.9rem;font-style:italic}.seal-btn{cursor:pointer;background:0 0;border:none;flex-direction:column;flex-shrink:0;align-items:center;gap:.4rem;padding:0;transition:transform .25s,filter .2s;display:flex}.seal-btn:hover{filter:brightness(1.07);transform:scale(1.07)}.seal-btn:active{transform:scale(.93)}.seal-btn__label{font-family:var(--font-sc);letter-spacing:.18em;color:var(--faded-ink);white-space:nowrap;font-size:.66rem}.auth-overlay.auth-overlay--hidden{display:none}.auth-overlay{z-index:100;-webkit-backdrop-filter:blur(2px);background:#28211885;justify-content:center;align-items:center;padding:1rem;animation:.2s fadeIn;display:flex;position:fixed;inset:0}.auth-modal{background:var(--letter);border:1px solid #dcd2bdcc;width:100%;max-width:440px;padding:2.75rem 2.75rem 2.25rem;animation:.3s cubic-bezier(.22,1,.36,1) slideUp;position:relative;box-shadow:0 8px 48px #3a32263d,0 2px 8px #3a32261a}@media (width<=480px){.auth-modal{padding:2rem 1.75rem 1.75rem}}.auth-modal__close{cursor:pointer;color:var(--faded-ink);background:0 0;border:none;padding:.3rem;font-family:sans-serif;font-size:1.1rem;line-height:1;transition:color .15s;position:absolute;top:1.2rem;right:1.5rem}.auth-modal__close:hover{color:var(--ink)}.auth-modal__preamble{font-family:var(--font);color:var(--ink);margin-bottom:.3rem;font-size:1.7rem;font-style:italic;font-weight:400;line-height:1.35}.auth-modal__sub{color:var(--faded-ink);margin-bottom:2rem;font-size:1.1rem;font-style:italic}.auth-tabs{border-bottom:1px solid var(--rule);gap:0;margin-bottom:2rem;display:flex}.auth-tab{cursor:pointer;font-family:var(--font-sc);letter-spacing:.1em;color:var(--faded-ink);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:0 1.5rem .75rem 0;font-size:.92rem;transition:color .2s,border-color .2s}.auth-tab.active{color:var(--ink);border-bottom-color:var(--wax)}.auth-tab:hover:not(.active){color:var(--ink)}.auth-form{flex-direction:column;gap:1.5rem;display:flex}.field{flex-direction:column;gap:.3rem;display:flex}.field__label{font-family:var(--font-sc);letter-spacing:.15em;color:var(--faded-ink);font-size:.78rem}.field__input{border:none;border-bottom:1px solid var(--rule);font-family:var(--font);color:var(--ink);background:0 0;outline:none;width:100%;padding:.4rem 0;font-size:1.2rem;font-style:italic;transition:border-color .2s}.field__input::placeholder{color:var(--faded-ink)}.field__input:focus{border-bottom-color:var(--gold)}.field__input-wrap{align-items:center;display:flex;position:relative}.field__input--inset{flex:1;padding-right:2rem}.field__eye{cursor:pointer;color:var(--faded-ink);background:0 0;border:none;align-items:center;padding:0;line-height:1;transition:color .15s;display:flex;position:absolute;bottom:.4rem;right:0}.field__eye:hover{color:var(--ink)}.consent{align-items:flex-start;gap:.75rem;display:flex}.consent__box{appearance:none;border:1px solid var(--rule);cursor:pointer;background:0 0;width:15px;min-width:15px;height:15px;min-height:15px;margin-top:3px;transition:border-color .2s,background .2s;position:relative}.consent__box:checked{background:var(--wax);border-color:var(--wax)}.consent__box:checked:after{content:"";border:1.5px solid var(--letter);border-top:none;border-left:none;width:5px;height:9px;position:absolute;top:1px;left:4px;transform:rotate(40deg)}.consent__label{color:var(--faded-ink);font-size:1rem;font-style:italic;line-height:1.55}.consent__label a{color:var(--gold-text);text-decoration:none}.consent__label a:hover{text-decoration:underline}.auth-error{color:var(--wax);font-size:1rem;font-style:italic}.forgot-link{cursor:pointer;font-family:var(--font);color:var(--faded-ink);text-align:left;background:0 0;border:none;padding:.3rem 0 0;font-size:.85rem;font-style:italic;transition:color .2s}.forgot-link:hover{color:var(--gold-text)}.auth-actions{flex-wrap:wrap;align-items:center;gap:1rem;margin-top:.4rem;display:flex}.btn-primary{background:var(--wax);color:var(--letter);font-family:var(--font-sc);letter-spacing:.15em;cursor:pointer;border:none;padding:.8rem 2rem;font-size:.96rem;transition:background .2s,transform .12s}.btn-primary:hover{background:var(--wax-dark)}.btn-primary:active{transform:scale(.97)}.btn-primary:disabled{background:var(--rule);color:var(--faded-ink);cursor:not-allowed}.btn-ghost{cursor:pointer;font-family:var(--font);color:var(--faded-ink);background:0 0;border:none;padding:0;font-size:.95rem;font-style:italic;transition:color .2s}.btn-ghost:hover{color:var(--ink)}.gmodal-overlay{z-index:500;-webkit-backdrop-filter:blur(2px);background:#28211880;justify-content:center;align-items:center;padding:1rem;animation:.2s fadeIn;display:flex;position:fixed;inset:0}.gmodal{background:var(--letter);text-align:center;border:1px solid #dcd2bdcc;flex-direction:column;align-items:center;gap:1rem;width:100%;max-width:400px;padding:2.5rem 2.5rem 2rem;animation:.25s cubic-bezier(.22,1,.36,1) slideUp;display:flex;box-shadow:0 8px 48px #3a32263d}.gmodal__icon{border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;font-family:sans-serif;font-size:1.1rem;font-weight:700;display:flex}.gmodal__icon--error{color:var(--wax);background:#7d2f2f1f}.gmodal__icon--warning{color:var(--gold-text);background:#c8a96a33}.gmodal__icon--info{color:var(--faded-ink);background:#3a322614}.gmodal__title{font-family:var(--font);color:var(--ink);font-size:1.25rem;font-style:italic;font-weight:400}.gmodal__message{font-family:var(--font);color:var(--faded-ink);font-size:1rem;font-style:italic;line-height:1.6}.ritual-page{background:var(--paper);z-index:200;flex-direction:column;justify-content:center;align-items:center;animation:.5s fadeIn;display:flex;position:fixed;inset:0}.ritual-stage{flex-direction:column;align-items:center;gap:2.5rem;display:flex;position:relative}.ritual-envelope{background:var(--letter);border:1px solid var(--rule);flex-direction:column;gap:.7rem;width:188px;height:248px;padding:1.4rem 1.3rem 1rem;display:flex;box-shadow:0 6px 24px #3a322624}.ritual-envelope.folding{animation:1.5s cubic-bezier(.4,0,.6,1) forwards letterFold}.ritual-envelope__greeting{font-family:var(--font);color:var(--faded-ink);font-size:.88rem;font-style:italic}.ritual-envelope__lines{flex-direction:column;gap:.6rem;margin-top:.3rem;display:flex}.ritual-envelope__line{background:var(--rule);height:1px}.ritual-envelope__line:first-child{width:80%}.ritual-envelope__line:nth-child(2){width:92%}.ritual-envelope__line:nth-child(3){width:70%}.ritual-envelope__line:nth-child(4){width:85%}.ritual-envelope__line:nth-child(5){width:64%}.ritual-envelope__line:nth-child(6){width:76%}.ritual-seal-wrap{animation:.85s cubic-bezier(.22,1.6,.5,1) forwards sealStamp}.ritual-caption{font-family:var(--font);color:var(--faded-ink);text-align:center;font-size:1.15rem;font-style:italic;animation:.7s .4s both fadeIn}.waiting-page{background:var(--paper);z-index:200;flex-direction:column;justify-content:center;align-items:center;padding:2rem;animation:1.1s fadeIn;display:flex;position:fixed;inset:0;overflow:hidden}.waiting-center{text-align:center;z-index:1;flex-direction:column;align-items:center;gap:1.25rem;max-width:480px;display:flex;position:relative}.waiting-seal{margin-bottom:.4rem;animation:5s ease-in-out infinite gentleFloat}.waiting-title{font-family:var(--font);color:var(--ink);font-size:1.85rem;font-style:italic;font-weight:300;line-height:1.35}.waiting-divider{justify-content:center;align-items:center;gap:.7rem;width:100%;display:flex}.waiting-divider__line{background:var(--gold);opacity:.4;flex:1;max-width:64px;height:1px}.waiting-divider__dot{background:var(--gold);opacity:.5;border-radius:50%;width:3px;height:3px}.waiting-promise{font-family:var(--font);color:var(--faded-ink);max-width:360px;font-size:1.1rem;font-style:italic;line-height:1.7}.waiting-again{font-family:var(--font-sc);letter-spacing:.16em;color:var(--faded-ink);cursor:pointer;background:0 0;border:none;border-bottom:1px solid #0000;margin-top:1.5rem;padding:.3rem 0;font-size:.72rem;transition:color .2s,border-color .2s}.waiting-again:hover{color:var(--ink);border-bottom-color:var(--rule)}.sparkle{background:var(--gold);pointer-events:none;animation:twinkle var(--dur,3s) var(--delay,0s) ease-in-out infinite;border-radius:50%;position:absolute}@keyframes cardShake{0%,to{transform:translate(0)}15%{transform:translate(-6px)}30%{transform:translate(5px)}45%{transform:translate(-4px)}60%{transform:translate(3px)}75%{transform:translate(-2px)}}@keyframes pageEnter{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(22px)}to{opacity:1;transform:translateY(0)}}@keyframes letterFold{0%{opacity:1;transform:translateY(0)scale(1)rotateX(0)}25%{opacity:1;transform:translateY(-10px)scale(.93)}55%{opacity:.65;transform:translateY(-30px)scale(.7)rotateX(20deg)}85%{opacity:.25;transform:translateY(-65px)scale(.42)rotateX(40deg)}to{opacity:0;transform:translateY(-85px)scale(.28)rotateX(52deg)}}@keyframes sealStamp{0%{opacity:0;transform:translateY(-100px)scale(2.5)}40%{opacity:1;transform:translateY(8px)scale(.92)}58%{opacity:1;transform:translateY(-5px)scale(1.06)}74%{opacity:1;transform:translateY(3px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes twinkle{0%,to{opacity:0;transform:scale(.2)}50%{opacity:.55;transform:scale(1)}}@keyframes gentleFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}
