:root{color-scheme:dark;--gold:#f4d69e;--ink:#fbf4ec;--muted:#c4c5db}*{box-sizing:border-box}body{margin:0;background:#080d24;color:var(--ink);font-family:Tahoma,Arial,sans-serif;min-height:100svh;overflow-x:hidden}button{font:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}button:focus-visible{outline:3px solid var(--gold);outline-offset:5px}#sky{position:fixed;inset:0;width:100%;height:100%;pointer-events:none}.glow{position:fixed;inset:0;background:radial-gradient(ellipse at 50% 55%,#57429450,transparent 65%),linear-gradient(0deg,#0c1234aa,transparent);pointer-events:none}main{position:relative;max-width:620px;margin:auto;padding:24px 24px 30px}header{display:flex;align-items:center;justify-content:space-between;gap:10px}.dedication{font-size:14px;color:var(--muted)}.music{border:1px solid #ffffff25;background:#ffffff08;color:var(--ink);padding:9px 13px;border-radius:30px;font-size:15px}.music[aria-pressed=true]{color:var(--gold);border-color:#f4d69e70}.intro{text-align:center;padding-top:22px}.moon{font-family:Georgia,serif;font-size:65px;line-height:1;color:var(--gold);text-shadow:0 0 35px #ebcd9f88;transform:rotate(-20deg)}.eyebrow{font-size:14px;color:var(--gold);margin:18px 0 12px}h1{font-family:Georgia,Tahoma,serif;font-size:clamp(36px,8vw,54px);line-height:1.5;font-weight:400;margin:0}h1 em{font-style:normal;color:var(--gold)}.subtitle{font-size:17px;line-height:1.9;color:var(--muted);margin:14px 0 0}.constellation{position:relative;width:min(100%,420px);height:320px;margin:10px auto 0;direction:ltr}.constellation svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}.constellation path{fill:none;stroke:#edcf9d45;stroke-width:1;stroke-dasharray:4 6;vector-effect:non-scaling-stroke}.star{position:absolute;width:52px;height:52px;transform:translate(-50%,-50%);border:0;background:none;color:#ffe0ac;font-size:30px;filter:drop-shadow(0 0 10px #ffd080);animation:breathe 3s ease-in-out infinite}.star:before{content:'';position:absolute;inset:8px;border:1px solid #f6d39b25;border-radius:50%}.star small{position:absolute;top:45px;left:0;right:0;font-size:13px;color:#e1d2ed;filter:none}.star.visited{color:#ffa5cb;filter:drop-shadow(0 0 12px #ff93c4)}.star:hover{scale:1.13}.progress{text-align:center;color:var(--muted);font-size:14px;margin:20px auto 18px;max-width:300px}.track{height:3px;background:#ffffff15;margin:13px auto;border-radius:5px;overflow:hidden}.track i{display:block;background:linear-gradient(90deg,#d494bd,var(--gold));width:0;height:100%;transition:width .6s}.progress p{line-height:1.7;margin:10px 0}.primary{display:block;width:100%;max-width:340px;margin:18px auto 0;background:linear-gradient(130deg,#68508b,#48355f);border:1px solid #d7bcdb70;box-shadow:0 5px 28px #755ca930;color:#fff3df;padding:15px 20px;border-radius:40px;font-size:17px}.primary:disabled{opacity:.55;cursor:default}footer{text-align:center;font-size:14px;color:#c4bdd6;margin-top:26px}dialog{position:fixed;border:1px solid #d8bbdb55;border-radius:26px;background:linear-gradient(155deg,#20213d,#17162e);color:var(--ink);padding:34px 26px 28px;width:min(90vw,440px);max-height:86svh;overflow-y:auto;text-align:center;box-shadow:0 25px 100px #0009}dialog::backdrop{background:#03051bc9;backdrop-filter:blur(8px)}.close{position:absolute;top:12px;left:14px;width:44px;height:44px;border:0;background:#ffffff09;border-radius:50%;color:var(--muted);font-size:28px}.letter-star{display:block;color:var(--gold);font-size:46px;margin-top:12px;text-shadow:0 0 25px #f6d6a580}h2{font-size:25px;font-weight:400;color:var(--gold);line-height:1.6;margin:15px 0}#letterText{font-size:20px;line-height:2.1;margin:24px 0}#final img{width:100%;height:auto;max-height:50svh;object-fit:contain;border-radius:16px;margin-top:8px;background:#080b16}.photo-caption{font-size:22px;color:var(--gold);line-height:1.9}.final-text{font-size:18px;line-height:2.1}body.modal{overflow:hidden}@keyframes breathe{50%{opacity:.65;filter:drop-shadow(0 0 17px #ffe4aa)}}@media(min-width:800px){main{padding-top:35px}.constellation{height:350px}.intro{padding-top:20px}}@media(prefers-reduced-motion:reduce){*,*:before{animation:none!important;transition:none!important}}
