:root{--night: #070910;--night-2: #10182a;--moon: #f4e7c5;--moon-dim: rgba(244, 231, 197, .68);--cinnabar: #9e2b24;--cinnabar-deep: #7a1f1a;--ink: #24180f;--paper: #f3ead4;--paper-2: #e8d7b0;--line: #c4a574;--jade: #dce8d6;--safe-top: max(14px, env(safe-area-inset-top));--safe-bottom: max(16px, env(safe-area-inset-bottom));--sheet: linear-gradient(180deg, #f7f0dd 0%, #efe2c2 100%)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;height:100%;height:100dvh;overflow:hidden;background:var(--night);color:var(--moon);font-family:"Noto Serif SC",Songti SC,serif;overscroll-behavior:none;-webkit-user-select:none;user-select:none}body.no-webgl{background:radial-gradient(circle at 50% 34%,#f4e7c5 0 6%,transparent 7%),radial-gradient(circle at 50% 34%,rgba(244,231,197,.32),transparent 36%),linear-gradient(#0a1424,#05070e 62%)}button,.chip{border-radius:0}#webgl{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;z-index:0;touch-action:none}.atmosphere,.vignette,.mist{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:1}.vignette{background:radial-gradient(ellipse at 50% 38%,transparent 58%,rgba(5,7,14,.38) 100%),linear-gradient(to top,rgba(5,7,14,.42) 0%,transparent 26%)}body[data-screen=recv] .vignette{background:radial-gradient(ellipse at 50% 28%,transparent 64%,rgba(5,7,14,.26) 100%),linear-gradient(to top,rgba(5,7,14,.2) 0%,transparent 18%)}body[data-screen=recv] .mist{height:7vh;background:linear-gradient(to top,rgba(5,7,14,.35),transparent)}.mist{top:auto;height:10vh;background:linear-gradient(to top,rgba(5,7,14,.55),transparent)}#app{position:relative;z-index:3;height:100%;max-width:430px;margin:0 auto;pointer-events:none}.screen{position:absolute;top:0;right:0;bottom:0;left:0;display:none;flex-direction:column;padding:calc(var(--safe-top) + 12px) 18px var(--safe-bottom)}.screen.active{display:flex;animation:rise .7s ease both}.screen-create,.screen-share,.screen-missing,.screen-loading{pointer-events:none}.screen-create .letter-sheet,.screen-share .parcel,.screen-missing,.screen-loading{pointer-events:auto}body.writing-sky .letter-sheet{opacity:0;pointer-events:none}.hidden{display:none!important}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}.brush-title,.home-title,.letter-sheet h2,.parcel h2,.load-glyph{font-family:Ma Shan Zheng,"Noto Serif SC",serif;font-weight:400}.btn-ink,.btn-ghost{min-height:46px;padding:0 18px;letter-spacing:.22em;cursor:pointer}.btn-ink{width:100%;border:0;background:#2a2118;color:#f4ead6}.btn-ink.compact{width:auto;min-width:72px}.btn-ghost{border:1px solid rgba(42,33,24,.28);background:transparent;color:#5c4a32}.btn-ghost.light{border-color:#f4e7c547;color:var(--moon)}.action-row{display:flex;gap:10px;margin-top:8px}.action-row>*{flex:1}.text-link{margin:4px auto 8px;background:none;border:0;color:var(--moon-dim);letter-spacing:.2em;font-size:13px;text-decoration:none}.letter-sheet,.parcel{pointer-events:auto;width:100%;background:linear-gradient(180deg,rgba(255,252,245,.18),transparent 18%),#f3ead4;color:#2a2118;border:0;box-shadow:0 22px 70px #0000006b}.letter-sheet,.parcel{padding:20px 18px 18px;overflow:auto;max-height:72vh}.letter-sheet{transition:opacity .7s ease}.letter-sheet h2,.parcel h2{margin:4px 0 12px;font-size:28px;letter-spacing:.12em}label{display:block;margin:8px 0;font-size:12px;letter-spacing:.18em;color:#7a6548}input,textarea{width:100%;margin-top:6px;border:0;border-bottom:1px solid rgba(42,33,24,.16);border-radius:0;padding:10px 2px;background:transparent;color:#2a2118;outline:none}textarea{resize:none;line-height:1.9;min-height:7.4em;padding:8px 10px;background:#fffaec80;-webkit-user-select:text;user-select:text}.name-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.field-label{margin:12px 0 8px;font-size:12px;letter-spacing:.22em;color:#7a6548}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{border:1px solid rgba(42,33,24,.2);background:transparent;color:#2a2118;padding:6px 12px;font-size:13px;letter-spacing:.08em}.chip.selected{background:var(--cinnabar);border-color:var(--cinnabar);color:var(--paper)}.hint-line{min-height:18px;font-size:12px;color:#8a7354}.link-box{display:flex;gap:8px;align-items:end}.link-box input{margin:0}.toast{position:fixed;left:50%;bottom:calc(var(--safe-bottom) + 22px);z-index:9;transform:translate(-50%);padding:10px 16px;background:#080a10d1;color:var(--moon);border:1px solid rgba(244,231,197,.16);font-size:13px;letter-spacing:.12em}.veil{position:fixed;top:0;right:0;bottom:0;left:0;z-index:8;display:grid;place-items:center;background:#07091052;color:var(--moon-dim);letter-spacing:.36em}.veil p{margin:0;font-size:13px}.screen-loading{justify-content:center;align-items:center;background:linear-gradient(180deg,#05070e47,#05070e8c)}.load-stage{display:flex;flex-direction:column;align-items:center;gap:14px;width:min(72vw,240px)}.load-glyph{margin:0;font-size:64px;line-height:1;color:var(--moon);text-shadow:0 0 28px rgba(244,231,197,.28);animation:load-glow 2.4s ease-in-out infinite}.load-hint{margin:0;font-size:12px;letter-spacing:.36em;color:var(--moon-dim)}.load-track{width:100%;height:2px;background:#f4e7c524;overflow:hidden}.load-fill{display:block;width:0%;height:100%;background:linear-gradient(90deg,rgba(244,231,197,.35),var(--moon));box-shadow:0 0 12px #f4e7c573;transition:width .28s ease}.load-percent{margin:0;font-size:11px;letter-spacing:.18em;color:#f4e7c58c;font-variant-numeric:tabular-nums}@keyframes load-glow{0%,to{text-shadow:0 0 22px rgba(244,231,197,.22);opacity:.88}50%{text-shadow:0 0 36px rgba(244,231,197,.42);opacity:1}}.screen-home{padding:calc(var(--safe-top) + 28px) 22px var(--safe-bottom);pointer-events:none}.home-date{margin:0;text-align:center;font-size:12px;letter-spacing:.46em;color:#f4e7c58c}.home-title{position:absolute;left:22px;top:16%;display:flex;flex-direction:column;margin:0;font-size:36px;line-height:1.26;letter-spacing:0;color:var(--moon);text-shadow:0 8px 28px rgba(0,0,0,.35)}.home-cta{margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:18px;padding-bottom:28px}.home-rule{width:22px;height:1px;background:#f4e7c580}.home-go{pointer-events:auto;border:1px solid rgba(244,231,197,.42);background:transparent;color:var(--moon);letter-spacing:.32em;font-size:14px;min-height:48px;padding:0 22px}.home-go:active{background:#f4e7c514}.sheet-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.grade-ribbon{font-size:12px;letter-spacing:.24em;color:var(--cinnabar)}.wish-label{margin-top:14px}.blessing-box{margin-top:8px;padding-top:8px;border-top:1px dashed rgba(42,33,24,.16)}.screen-create,.screen-share{justify-content:flex-end}.parcel{margin-top:auto;text-align:center;position:relative}.parcel-kicker{margin:4px 0 0;letter-spacing:.4em;font-size:12px;color:#7a6548}.parcel-copy{margin:0 0 16px;color:#5c4a32;line-height:1.8}.stamp-wrap{width:148px;margin:16px auto 8px;padding:8px;background:#fbf6e8;border:1px solid rgba(42,33,24,.12)}#qr{display:block;width:132px;height:132px}.screen-recv{justify-content:flex-end;gap:6px;pointer-events:none;padding:calc(var(--safe-top) + 8px) 18px calc(var(--safe-bottom) + 6px)}.night-letter{width:74%;max-width:260px;align-self:flex-start;max-height:none;overflow:auto;padding:0 6px 2px 0;background:none;color:var(--moon);pointer-events:auto;-webkit-user-select:text;user-select:text;animation:rise-card .9s ease both}.night-letter .scroll-to{display:none}.night-letter .scroll-body{margin:0 0 10px;line-height:1.86;font-size:14px;text-shadow:0 2px 12px rgba(0,0,0,.85),0 0 18px rgba(5,7,14,.7)}.night-letter .scroll-closing,.night-letter .scroll-from{margin:0;font-size:13px;color:var(--moon-dim);text-shadow:0 4px 14px rgba(0,0,0,.65)}.night-letter .scroll-from{text-align:right;margin-top:6px}.recv-actions{display:flex;flex-direction:column;align-items:center;gap:4px;width:100%;pointer-events:auto}.screen-missing{justify-content:flex-end;align-items:center;text-align:center;gap:12px}.missing-copy{margin:8px 24px 0;color:var(--moon-dim);line-height:1.9;font-size:14px}@keyframes rise-card{0%{opacity:0;transform:translateY(22px)}to{opacity:1;transform:none}}
