:root{--cream: #fffbf2;--cream-2: #f5efe2;--ink: #141414;--ink-2: #3a3a3a;--muted: #8a8478;--line: #e7e0d1;--white: #ffffff;--accent-phh: #1f3d2b;--accent-phh-gold: #b8975a;--accent-ast: #c0292a;--ok: #2f7a4d;--warn: #b4531a;--radius: 14px;--radius-sm: 8px;--shadow: 0 2px 10px rgba(20, 20, 20, .06);--shadow-lg: 0 12px 34px rgba(20, 20, 20, .14);--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--maxw: 460px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);color:var(--ink);background:var(--cream);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:inherit}button{font-family:inherit;cursor:pointer}[data-hotel=parkhotel-horst]{--accent: var(--accent-phh)}[data-hotel=hotel-asteria]{--accent: var(--accent-ast)}.app{max-width:var(--maxw);margin:0 auto;min-height:100%;display:flex;flex-direction:column;background:var(--cream);position:relative}.screen{flex:1;padding:20px 20px calc(84px + env(safe-area-inset-bottom))}.screen--plain{padding-bottom:24px}.topbar{display:flex;align-items:center;justify-content:space-between;padding:18px 20px 8px}.topbar h1{font-size:20px;margin:0;letter-spacing:-.01em}.brandmark{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}h2{font-size:17px;margin:26px 0 12px;letter-spacing:-.01em}p{line-height:1.55}.muted{color:var(--muted)}.center{text-align:center}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;border:none;border-radius:var(--radius-sm);padding:15px 18px;font-size:16px;font-weight:600;background:var(--ink);color:var(--white);transition:opacity .15s,transform .05s}.btn:active{transform:scale(.99)}.btn:disabled{opacity:.45;cursor:default}.btn--ghost{background:transparent;color:var(--ink);border:1px solid var(--line)}.btn--accent{background:var(--accent, var(--ink))}.btn--sm{width:auto;padding:10px 14px;font-size:14px;border-radius:var(--radius-sm)}.card{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow)}.card+.card{margin-top:12px}.field{margin-bottom:14px}.field label{display:block;font-size:13px;font-weight:600;margin-bottom:6px;color:var(--ink-2)}.input{width:100%;padding:14px;font-size:16px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--white);color:var(--ink)}.input:focus{outline:2px solid var(--ink);outline-offset:1px}.code-input{letter-spacing:.4em;text-align:center;font-size:28px;font-weight:700;padding:16px}.error{background:#fdecec;color:#a11;border-radius:var(--radius-sm);padding:12px 14px;font-size:14px;margin:12px 0}.notice{background:#eef6ef;color:var(--ok);border-radius:var(--radius-sm);padding:12px 14px;font-size:14px;margin:12px 0}.tabbar{position:fixed;left:50%;transform:translate(-50%);bottom:0;width:100%;max-width:var(--maxw);display:flex;background:var(--white);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}.tabbar a{flex:1;text-align:center;padding:10px 0 12px;text-decoration:none;color:var(--muted);font-size:11px;display:flex;flex-direction:column;align-items:center;gap:3px}.tabbar a.active{color:var(--ink)}.tabbar .ico{font-size:20px;line-height:1}.seg{display:flex;gap:8px}.seg button{flex:1;padding:12px;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--white);font-weight:600;font-size:14px;color:var(--ink-2)}.seg button[aria-pressed=true]{border-color:var(--ink);background:var(--ink);color:var(--white)}.admin-tab{flex:1;text-align:center;padding:10px;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--white);font-weight:600;font-size:13px;color:var(--ink-2);text-decoration:none}.admin-tab.active{border-color:var(--ink);background:var(--ink);color:var(--white)}.stats{display:grid;grid-template-columns:1fr 1fr;gap:12px}.stat{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);padding:16px}.stat .n{font-size:28px;font-weight:700;letter-spacing:-.02em}.stat .l{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.row{display:flex;align-items:center;gap:12px}.spread{justify-content:space-between}.pill{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:4px 9px;border-radius:999px;background:var(--cream-2);color:var(--ink-2)}.pill--accent{background:var(--accent, var(--ink));color:#fff}.stack>*+*{margin-top:10px}.grow{flex:1}.hr{height:1px;background:var(--line);border:0;margin:18px 0}.spinner{width:22px;height:22px;border:2px solid var(--line);border-top-color:var(--ink);border-radius:50%;animation:spin .7s linear infinite;margin:40px auto}@keyframes spin{to{transform:rotate(360deg)}}.stampcard{position:relative;background:linear-gradient(160deg,#1c1c1c,#141414 60%);border-radius:18px;padding:24px 22px;color:#fff;overflow:hidden;box-shadow:var(--shadow-lg)}.stampcard__sheen{position:absolute;top:-60%;right:-20%;width:70%;height:200%;background:radial-gradient(closest-side,rgba(255,255,255,.08),transparent);transform:rotate(18deg);pointer-events:none}.stampcard__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.stamp{aspect-ratio:1;border-radius:50%;border:2px dashed rgba(255,255,255,.28);display:flex;align-items:center;justify-content:center;color:#ffffff80;font-weight:700;transition:transform .2s ease}.stamp--filled{background:linear-gradient(158deg,#e0c78d,#b8975a 70%);border:3px solid var(--accent, #b8975a);color:#2c2417;box-shadow:0 4px 12px #0006;animation:pop .3s ease}.stamp__mark{font-size:26px;line-height:1;font-weight:800}.stamp__num{font-size:15px;opacity:.6}@keyframes pop{0%{transform:scale(.5);opacity:0}70%{transform:scale(1.08)}to{transform:scale(1);opacity:1}}
