:root{--bg:#0e0c0a;--panel:#1a1611;--border:#383026;--text:#f3ede1;--muted:#a89c89;--accent:#e3b964;--accent-ink:#221c12;--serif:var(--font-serif),"Gowun Batang","Nanum Myeongjo",serif}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Apple SD Gothic Neo,Malgun Gothic,Roboto,Helvetica,Arial,sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased;overflow:hidden}.stage{position:relative;width:100vw;height:100vh;height:100dvh;overflow:hidden;background:radial-gradient(ellipse at 50% 36%,hsla(40,69%,64%,.07) 0,hsla(40,69%,64%,0) 45%),radial-gradient(ellipse at 50% 42%,#1b1610 0,#0e0c0a 72%);touch-action:none}.stage:after{content:"";inset:0;z-index:4;background:linear-gradient(180deg,rgba(10,8,6,.55) 0,rgba(10,8,6,0) 14%,rgba(10,8,6,0) 82%,rgba(10,8,6,.6))}.brand,.stage:after{position:absolute;pointer-events:none}.brand{top:22px;left:0;right:0;z-index:5;text-align:center}.brand-title{font-weight:700;font-size:19px;letter-spacing:.32em;text-indent:.32em;color:var(--text);text-shadow:0 2px 16px rgba(0,0,0,.7)}.brand-sub,.brand-title{font-family:var(--serif)}.brand-sub{margin-top:4px;font-size:11px;letter-spacing:.42em;text-indent:.42em;color:var(--muted)}.video-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:min(88vw,600px);aspect-ratio:16/9;z-index:3;border-radius:12px;overflow:hidden;border:1px solid var(--border);box-shadow:0 0 70px hsla(40,69%,64%,.06),0 0 60px rgba(0,0,0,.65);background:#000}.video-center video{width:100%;height:100%;display:block;object-fit:contain;background:#000}.bubble{--bh:42;position:absolute;top:0;left:0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:2px;padding:12px;border-radius:50%;cursor:pointer;color:#f7f1e4;border:1px solid hsla(var(--bh),65%,75%,.32);background:radial-gradient(circle at 35% 30%,hsla(var(--bh),85%,78%,.42),hsla(var(--bh),70%,60%,.14) 55%,hsla(var(--bh),65%,50%,.05) 100%);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);box-shadow:inset 0 0 22px hsla(var(--bh),85%,72%,.16),0 0 30px hsla(var(--bh),85%,62%,.2),0 6px 24px rgba(0,0,0,.3);will-change:transform;transition:box-shadow .25s ease,border-color .25s ease}.bubble:focus-visible,.bubble:hover{outline:none;border-color:hsla(var(--bh),75%,80%,.6);box-shadow:inset 0 0 26px hsla(var(--bh),85%,75%,.24),0 0 42px hsla(var(--bh),85%,65%,.32),0 10px 32px rgba(0,0,0,.4)}.bubble .b-name{font-family:var(--serif);font-weight:700;font-size:12px;line-height:1.2;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bubble .b-msg{font-size:11px;line-height:1.35;opacity:.92;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}.motes{inset:0;z-index:1;overflow:hidden;pointer-events:none}.mote,.motes{position:absolute}.mote{top:0;border-radius:50%;background:radial-gradient(circle,rgba(255,222,158,.9),rgba(255,222,158,0) 70%);animation:rise linear infinite;will-change:transform}@keyframes rise{0%{transform:translateY(106vh)}to{transform:translateY(-8vh)}}.credits{position:absolute;inset:0;z-index:1;overflow:hidden;pointer-events:none}.credit-name{position:absolute;left:0;white-space:nowrap;font-family:var(--serif);animation:creditFlow var(--dur,30s) linear var(--delay,0s) infinite}.credit-name.helper{color:#ecdcb0;font-weight:700;letter-spacing:.04em;text-shadow:0 0 20px hsla(40,69%,64%,.3)}.credit-name.guest{color:#b3a890;letter-spacing:.02em}@keyframes creditFlow{0%{transform:translateX(-110%)}to{transform:translateX(100vw)}}.hint{bottom:96px;z-index:4;width:max-content;max-width:86vw;color:var(--muted);font-size:14px;text-align:center;pointer-events:none}.hint,.write-btn{position:absolute;left:50%;transform:translateX(-50%);font-family:var(--serif)}.write-btn{bottom:26px;z-index:6;background:var(--accent);color:var(--accent-ink);border:none;border-radius:999px;padding:13px 26px;font-size:15px;font-weight:700;letter-spacing:.06em;cursor:pointer;box-shadow:0 0 32px hsla(40,69%,64%,.25),0 6px 24px rgba(0,0,0,.45)}.overlay{position:fixed;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(8,6,4,.6);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}.card{width:100%;max-width:360px;background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:24px}.card-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:12px}.card-head strong{font-family:var(--serif);font-size:16px}.card-date{color:var(--muted);font-size:12px;white-space:nowrap}.card-msg{margin:0 0 18px;white-space:pre-wrap;word-break:break-word}.card-actions{display:flex;gap:10px}.card-close{background:#28221a;color:var(--text);border:1px solid var(--border);border-radius:10px}.card-close,.card-delete{flex:1 1;padding:11px;font-size:15px;font-weight:600;cursor:pointer}.card-delete{background:transparent;color:#e08f7a;border:1px solid hsla(12,62%,68%,.45);border-radius:10px}.form-title{margin:0 0 14px;font-family:var(--serif);font-size:18px;letter-spacing:.08em}.guestbook-form{display:flex;flex-direction:column;gap:12px}.guestbook-form input,.guestbook-form textarea{width:100%;background:#14100b;border:1px solid var(--border);border-radius:10px;color:var(--text);padding:12px 14px;font-size:15px;font-family:inherit;resize:vertical}.guestbook-form input:focus,.guestbook-form textarea:focus{outline:none;border-color:#6b5c3e}.form-actions{display:flex;gap:10px;justify-content:flex-end}.form-actions button{border-radius:10px;padding:11px 20px;font-size:15px;font-weight:600;cursor:pointer}.form-actions .btn-ghost{background:transparent;color:var(--muted);border:1px solid var(--border)}.form-actions button[type=submit]{background:var(--accent);color:var(--accent-ink);border:none}.form-actions button:disabled{opacity:.5;cursor:not-allowed}.form-error{color:#e08f7a;font-size:14px;margin:0}@media (max-width:640px){.bubble{padding:8px}.bubble .b-name{font-size:10px}.bubble .b-msg{font-size:9px;-webkit-line-clamp:2}}@media (prefers-reduced-motion:reduce){.bubble{transition:none}.mote{animation:none;opacity:.12!important}}