:root{--accent: #2f6b45;--text: #10231b;--muted: #6b7f74;--bg: #f6f4ee;--card: #ffffff;--empty: #e4e8e4}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font-body, -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Noto Sans Thai", sans-serif);-webkit-font-smoothing:antialiased}.wrap{max-width:480px;margin:0 auto;padding:24px 20px calc(32px + env(safe-area-inset-bottom));min-height:100vh;background:var(--bg);color:var(--text)}.name{color:var(--muted);font-size:15px;margin:0 0 4px}.count{font-family:var(--font-heading, inherit);font-size:44px;font-weight:700;letter-spacing:-.02em;margin:0 0 2px;font-variant-numeric:tabular-nums}.count small{font-size:22px;font-weight:600;color:var(--muted)}.sub{color:var(--muted);margin:0 0 20px;font-size:15px}.card{background:var(--card);border-radius:20px;padding:22px 20px;box-shadow:0 1px 3px #10231b14}.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.stamp{aspect-ratio:1;border-radius:50%;background:var(--empty);display:grid;place-items:center;font-size:20px;color:transparent}.stamp.on{background:var(--accent);color:#fff}.reward{display:flex;align-items:center;gap:14px;margin-bottom:18px;padding:14px 16px;border-radius:16px;background:var(--reward-bg, var(--accent));color:var(--reward-text, #fff)}.reward strong{display:block;font-size:16px;line-height:1.4;font-family:var(--font-heading, inherit)}.reward span{display:block;font-size:13px;opacity:.9;line-height:1.4}.badge{flex:0 0 52px;height:52px;border-radius:50%;background:var(--reward-text, #fff);color:var(--reward-bg, var(--accent));display:grid;place-items:center;font-size:11px;font-weight:800;letter-spacing:.04em}label{display:block;font-size:15px;margin-bottom:8px}input{width:100%;padding:14px 16px;font-size:17px;border:1px solid #d9ded9;border-radius:12px;background:#fff;color:var(--text)}input:focus{outline:2px solid var(--accent);outline-offset:-1px}button{width:100%;margin-top:12px;padding:15px;font-size:16px;font-weight:600;color:#fff;background:var(--accent);border:0;border-radius:12px}button:disabled{opacity:.5}.error{color:#a3261f;font-size:14px;margin:10px 0 0;line-height:1.5}.note{color:var(--muted);font-size:14px;margin:10px 0 0;line-height:1.6}.skeleton{opacity:.45}button.link{background:none;color:var(--accent);font-size:15px;font-weight:600;padding:12px 0 0;margin:0;text-decoration:underline;text-underline-offset:3px}.warn{margin:0 0 12px;padding:12px 14px;border-radius:12px;background:#fdf1dc;color:#7a4b12;font-size:14px;line-height:1.5}.page-bg{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;background-size:cover;background-position:center;background-repeat:no-repeat}.logo{display:block;width:56px;height:56px;object-fit:contain;margin-bottom:10px}.stamp.art{background:none;object-fit:contain;width:100%;height:auto}.stamp.art.ghost{opacity:.22}.badge.art{background:none;object-fit:contain}.blocks{margin-top:18px;display:flex;flex-direction:column;gap:12px}.block{background:var(--block-bg, var(--card));border-radius:16px;overflow:hidden;box-shadow:0 1px 3px #10231b14}.block img{display:block;width:100%;height:auto}.block-text{padding:14px 16px}.block strong{display:block;font-size:16px;line-height:1.4;color:var(--block-title, var(--text));font-family:var(--font-heading, inherit)}.block p{margin:6px 0 0;font-size:14px;line-height:1.6;color:var(--block-body, var(--muted))}.block.announce{padding:14px 16px;border-left:3px solid var(--accent);border-radius:12px}.block.link{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 16px;text-decoration:none;color:var(--text);font-weight:600;font-size:15px}.block.link{color:var(--block-title, var(--text))}.block.link span:last-child{color:var(--block-body, var(--muted));font-size:20px;line-height:1}.block-cta{display:inline-block;margin-top:12px;padding:10px 18px;border-radius:10px;background:var(--accent);color:#fff;text-decoration:none;font-weight:600;font-size:14px}
