:root{--bg: #fff6f3;--bg-soft: #fdeae6;--card: #ffffff;--rose-50: #fdf0ee;--rose-100: #fbdcd6;--rose-300: #f0a8a0;--rose-500: #e07a7a;--rose-600: #d15f6c;--rose-700: #b14a5c;--ink: #4a3138;--ink-soft: #8a6b71;--line: #f3ddd8;--good: #5a9e7a;--shadow: 0 10px 40px -12px rgba(177, 74, 92, .22);--radius: 22px;--font-display: "Fraunces", Georgia, serif;--font-body: "Hanken Grotesk", system-ui, sans-serif}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font-body);color:var(--ink);background:radial-gradient(1200px 600px at 80% -10%,var(--bg-soft),transparent 60%),radial-gradient(900px 500px at -10% 110%,#ffe9f0,transparent 55%),var(--bg);min-height:100dvh;line-height:1.55}.wrap{width:100%;max-width:620px;margin:0 auto;padding:clamp(20px,5vw,40px) 20px 80px}h1,h2,h3{font-family:var(--font-display);font-weight:500;margin:0}.greeting{font-family:var(--font-display);font-size:clamp(1.9rem,6vw,2.8rem);line-height:1.15;letter-spacing:-.02em}.greeting em{font-style:italic;color:var(--rose-600)}.points-card{margin-top:22px;background:linear-gradient(135deg,var(--rose-500),var(--rose-700));color:#fff;border-radius:var(--radius);padding:26px 28px;box-shadow:var(--shadow);position:relative;overflow:hidden}.points-card:after{content:"♥";position:absolute;right:-10px;bottom:-30px;font-size:160px;opacity:.12;line-height:1}.points-label{font-size:.85rem;letter-spacing:.08em;text-transform:uppercase;opacity:.85}.points-value{font-family:var(--font-display);font-size:3.4rem;line-height:1;margin-top:4px}.points-value span{font-size:1.3rem;opacity:.85;margin-left:6px}.section{margin-top:34px}.section>h2{font-size:1.35rem;margin-bottom:14px;display:flex;align-items:baseline;gap:10px}.section>h2 small{font-family:var(--font-body);font-size:.8rem;color:var(--ink-soft);font-weight:500}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:20px;box-shadow:0 4px 20px -16px #b14a5c66}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px}.tile{appearance:none;border:1px solid var(--line);background:var(--card);border-radius:16px;padding:16px 14px;text-align:left;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;font-family:inherit;color:var(--ink)}.tile:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--rose-300)}.tile .emoji{font-size:1.6rem;display:block}.tile .name{font-weight:600;margin-top:8px;display:block}.tile .pts{color:var(--rose-600);font-weight:600;font-size:.9rem}.tile[aria-pressed=true]{border-color:var(--rose-500);box-shadow:var(--shadow);background:var(--rose-50)}.btn{appearance:none;border:none;background:var(--rose-600);color:#fff;font-family:inherit;font-weight:600;font-size:1rem;padding:13px 22px;border-radius:999px;cursor:pointer;transition:filter .15s ease,transform .1s ease}.btn:hover{filter:brightness(1.05)}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-ghost{background:transparent;color:var(--rose-700);border:1px solid var(--rose-300)}input[type=text],input[type=password],textarea,select{width:100%;font-family:inherit;font-size:1rem;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#fff;color:var(--ink)}input:focus,textarea:focus,select:focus{outline:2px solid var(--rose-300);border-color:transparent}textarea{min-height:90px;resize:vertical}label{font-size:.9rem;font-weight:600;color:var(--ink-soft);display:block;margin-bottom:6px}.field{margin-top:14px}.nav{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.nav a{color:var(--rose-700);text-decoration:none;font-weight:600;font-size:.92rem}.nav a:hover{text-decoration:underline}.muted{color:var(--ink-soft)}.center{text-align:center}.login-wrap{min-height:100dvh;display:grid;place-items:center;padding:24px}.login-card{width:100%;max-width:380px;text-align:center}.login-card .heart{font-size:2.4rem}.login-card h1{font-size:1.8rem;margin:10px 0 6px}.entry{display:flex;gap:14px;padding:14px 0;border-bottom:1px solid var(--line)}.entry:last-child{border-bottom:none}.entry .ico{font-size:1.5rem}.entry .meta{flex:1}.entry .meta b{font-family:var(--font-display);font-weight:500}.entry .when{font-size:.82rem;color:var(--ink-soft)}.entry img{width:56px;height:56px;object-fit:cover;border-radius:12px}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%);background:var(--ink);color:#fff;padding:12px 20px;border-radius:999px;box-shadow:var(--shadow);opacity:0;pointer-events:none;transition:opacity .25s ease,transform .25s ease;z-index:50}.toast.show{opacity:1;transform:translate(-50%) translateY(-4px)}@keyframes fadeup{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.section,.points-card,.greeting{animation:fadeup .5s ease both}.points-card{animation-delay:.05s}.bottom-nav{position:fixed;bottom:0;left:0;right:0;background:#fff6f3eb;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-top:1px solid var(--line);display:flex;justify-content:center;gap:56px;padding:6px 0;padding-bottom:max(6px,env(safe-area-inset-bottom));z-index:100}.bottom-nav a{display:flex;flex-direction:column;align-items:center;gap:3px;text-decoration:none;color:var(--ink-soft);font-size:.72rem;font-weight:600;padding:6px 16px;transition:color .15s}.bottom-nav a.active{color:var(--rose-600)}.bottom-nav .nav-icon{font-size:1.35rem;line-height:1}.photo-wall{display:grid;grid-template-columns:1fr 1fr;gap:18px;padding:8px 4px 24px}.polaroid{background:#fff;padding:10px 10px 0;box-shadow:0 8px 28px -10px #4a313847,0 2px 8px -4px #4a31381f;position:relative;transition:transform .2s ease,box-shadow .2s ease}.photo-wall .polaroid:nth-child(odd){transform:rotate(-2.2deg)}.photo-wall .polaroid:nth-child(2n){transform:rotate(1.6deg)}.polaroid:hover{transform:rotate(0) scale(1.03)!important;box-shadow:0 14px 40px -10px #4a313859;z-index:2}.polaroid-photo{width:100%;aspect-ratio:1;object-fit:cover;display:block}.polaroid-emoji-area{width:100%;aspect-ratio:1;background:var(--rose-50);display:flex;align-items:center;justify-content:center;font-size:3rem}.polaroid-body{padding:10px 4px 14px;text-align:center}.polaroid-caption{font-family:var(--font-display);font-size:.88rem;font-weight:500;color:var(--ink);line-height:1.25}.polaroid-meta{font-size:.68rem;color:var(--ink-soft);margin-top:4px;line-height:1.35}.upload-zone{border:2px dashed var(--rose-300);border-radius:16px;background:var(--rose-50);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:border-color .15s,background .15s;overflow:hidden;position:relative;min-height:130px}.upload-zone:hover{border-color:var(--rose-500);background:var(--rose-100)}.upload-zone.has-image{border-style:solid;border-color:var(--line);background:#fff;cursor:default}.upload-prompt{text-align:center;padding:24px 16px;pointer-events:none}.upload-prompt .up-icon{font-size:2rem;display:block}.upload-prompt .up-label{font-weight:600;font-size:.95rem;margin-top:8px}.upload-prompt .up-hint{font-size:.78rem;color:var(--ink-soft);margin-top:3px}.upload-preview{width:100%;position:relative}.upload-preview img{width:100%;max-height:240px;object-fit:cover;display:block;border-radius:12px}.upload-clear{position:absolute;top:8px;right:8px;width:30px;height:30px;border-radius:50%;border:none;background:#ffffffeb;color:var(--ink);font-size:.9rem;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #4a31382e;line-height:1}
