:root{--ink:#2a1830;--paper:#fff8e8;--pink:#ff8fab;--plum:#1a0f22;--bar-h:60px}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--plum);color:var(--ink);font-family:'Galmuri11','Galmuri9',system-ui,-apple-system,'Noto Sans KR',sans-serif;-webkit-text-size-adjust:100%}
body{overflow:hidden;touch-action:manipulation;user-select:none;-webkit-user-select:none}
[hidden]{display:none!important}
button{font:inherit;color:inherit;cursor:pointer}
#app{position:fixed;inset:0;width:min(100vw,480px);margin:0 auto;overflow:hidden;background:#241431}
#world{position:absolute;left:0;top:0;display:block;touch-action:none}

.pill{position:absolute;top:calc(8px + env(safe-area-inset-top));background:var(--paper);border:3px solid var(--ink);box-shadow:0 3px 0 var(--ink);padding:6px 10px;font-size:12px;z-index:5}
#title{left:8px}#musicBtn{right:8px}

#bar{position:absolute;left:0;right:0;bottom:0;display:flex;gap:6px;padding:8px 8px calc(8px + env(safe-area-inset-bottom));pointer-events:none;z-index:6}
#bar button{pointer-events:auto;flex:1;min-width:0;height:44px;border:2px solid rgba(42,24,48,.55);border-radius:10px;background:rgba(255,255,255,.62);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);color:var(--ink);font-size:13px;padding:0 2px;line-height:1.25;box-shadow:0 2px 6px rgba(0,0,0,.25)}
#bar button:active{background:var(--pink);color:#fff}

#nearBtn{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(var(--bar-h) + 78px + env(safe-area-inset-bottom));z-index:6;padding:10px 18px;font-size:15px;color:#fff;background:var(--pink);border:3px solid var(--ink);box-shadow:0 3px 0 var(--ink);white-space:nowrap}
#joy{position:absolute;left:14px;bottom:calc(var(--bar-h) + 14px + env(safe-area-inset-bottom));width:96px;height:96px;border-radius:50%;background:rgba(255,255,255,.16);border:3px solid var(--paper);z-index:5;touch-action:none}
#knob{position:absolute;left:24px;top:24px;width:42px;height:42px;border-radius:50%;background:var(--paper);border:3px solid var(--ink);pointer-events:none}

#loading{position:absolute;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;background:var(--plum);color:var(--paper);text-align:center;padding:24px}
#loading button{margin-top:14px;padding:10px 18px;background:var(--pink);border:3px solid var(--ink);color:#fff}

#entry{position:absolute;inset:0;z-index:20;display:flex;align-items:flex-start;justify-content:center;overflow:auto;padding:18px 14px;background:radial-gradient(circle at 50% 18%,#7a3a5e,#2a1830 72%);color:var(--paper)}
.entry-card{width:100%;text-align:center;padding-bottom:24px}
.couple img{height:120px;image-rendering:auto;margin:0 4px}
#entryTitle{margin:8px 0 2px;font-size:26px;font-weight:400;color:#ffe1eb;text-shadow:0 0 12px #ff6b93,2px 2px 0 var(--ink)}
.entry-card p{margin:3px 0;font-size:14px}
.greet{margin-top:10px!important}
#nick{width:100%;max-width:280px;margin-top:8px;padding:11px;font:inherit;font-size:16px;text-align:center;border:3px solid var(--ink);background:#fff;color:var(--ink)}
.avatars{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin:12px auto 4px;max-width:340px}
.avatars button{background:#fff8e8;border:3px solid var(--ink);padding:4px 0 0;height:78px;overflow:hidden;opacity:.8}
.avatars button img{height:100%;max-width:100%;object-fit:contain;object-position:center top}
.avatars button[aria-checked="true"]{border-color:var(--pink);outline:3px solid var(--pink);opacity:1;background:#ffe1eb}
.primary{margin-top:10px;padding:13px 34px;font-size:18px;color:#fff;background:var(--pink);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink)}
.link{display:block;margin:8px auto 0;background:none;border:0;color:#ffd9e4;text-decoration:underline;font-size:13px;padding:6px}
.fine{font-size:11px!important;opacity:.7;margin-top:12px!important}

#modal{position:absolute;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;padding:12px;background:rgba(0,0,0,.65)}
.card{position:relative;width:100%;max-height:88%;overflow:auto;padding:16px 14px 14px;background:var(--paper);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);user-select:text;-webkit-user-select:text;touch-action:pan-y}
.card h3{margin:0 28px 10px 0;font-size:17px;font-weight:400}
#close{position:absolute;right:6px;top:4px;border:0;background:none;font-size:20px;padding:6px 10px}
.card p{margin:6px 0;font-size:14px;line-height:1.65;white-space:pre-line}
.row{display:flex;gap:6px;margin-top:8px}
.row>*{flex:1}
.btn{display:block;text-align:center;padding:10px 6px;font-size:13px;background:#fff;border:2px solid var(--ink);color:var(--ink);text-decoration:none}
.btn.off{opacity:.45;pointer-events:none}
.btn.pink{background:var(--pink);color:#fff}
.acct{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 0;border-bottom:2px dotted #c9b79a;font-size:13px;line-height:1.5}
.acct b{font-weight:400;color:#ff6b93}
.acct .num{font-size:15px;user-select:all;-webkit-user-select:all}
.acct button{padding:8px 10px;font-size:13px;color:#fff;background:var(--pink);border:2px solid var(--ink)}
.mapbox{height:96px;margin-bottom:8px;border:3px solid var(--ink);display:flex;align-items:center;justify-content:center;font-size:13px;background:repeating-linear-gradient(45deg,#e8f6d8 0 8px,#f4fbe9 8px 16px)}
.photo{width:100%;aspect-ratio:7/5;border:3px solid var(--ink);display:flex;align-items:center;justify-content:center;font-size:40px;margin-bottom:8px;background:linear-gradient(#ffd6e5,#ffe9b8)}
.photo img{width:100%;height:100%;object-fit:cover;display:block}
.thumbs{display:grid;grid-template-columns:repeat(6,1fr);gap:4px;margin-bottom:6px}
.thumbs button{aspect-ratio:7/5;border:2px solid var(--ink);padding:0;opacity:.55;overflow:hidden;background:linear-gradient(#ffd6e5,#ffe9b8)}
.thumbs button img{width:100%;height:100%;object-fit:cover}
.thumbs button[aria-pressed="true"]{opacity:1;outline:2px solid var(--pink)}
.notes{max-height:150px;overflow:auto;margin-top:6px;font-size:13px}
.notes div{padding:6px 0;border-bottom:2px dotted #c9b79a;word-break:break-word;white-space:pre-wrap}
.notes b{font-weight:400;color:#ff6b93;margin-right:6px}
.notes .del{float:right;margin-left:6px;padding:2px 8px;font-size:11px;background:#fff;border:2px solid var(--ink);color:#c0303a}
.form{display:flex;gap:6px;margin-top:8px}
.form input{flex:1;min-width:0;font:inherit;font-size:14px;padding:9px;border:2px solid var(--ink);background:#fff;color:var(--ink)}
.form input.name{flex:0 0 76px}
.form input[readonly]{background:#f0e8f4;color:#6a5a7a}
.form button{padding:0 14px;color:#fff;background:var(--pink);border:2px solid var(--ink);font-size:13px}
.err{margin-top:6px;font-size:12px;color:#c0303a;min-height:16px}
.pager{display:flex;justify-content:space-between;align-items:center;margin-top:10px;font-size:12px}
.pager button{padding:8px 14px;background:var(--pink);color:#fff;border:2px solid var(--ink)}

#plain{position:absolute;inset:0;z-index:25;overflow:auto;background:var(--paper);padding:20px 16px 40px;user-select:text;-webkit-user-select:text}
#plain h2{font-size:20px;font-weight:400;margin:0 0 4px}
#plain section{margin:22px 0;padding-top:14px;border-top:3px solid var(--ink)}
#plain h3{font-size:16px;font-weight:400;margin:0 0 8px;color:#ff6b93}
#plain .back{position:sticky;top:0;float:right;padding:6px 10px;font-size:12px;background:#fff;border:2px solid var(--ink)}
