:root{--bg:#e7eee9;--bg-deep:#0f1c18;--surface:#ffffffd1;--surface-solid:#f7faf8;--ink:#13201b;--muted:#5a6b63;--line:#13201b14;--accent:#1f6b4f;--accent-soft:#d7ebe1;--warm:#c47a3a;--danger:#a33b2d;--shadow:0 18px 50px #0f1c181f;--radius:22px;--font-display:"Fraunces", Georgia, serif;--font-body:"Manrope", system-ui, sans-serif;--tab-h:72px;--safe-bottom:env(safe-area-inset-bottom,0px)}*{box-sizing:border-box}html,body,#root{min-height:100%}body{font-family:var(--font-body);color:var(--ink);background:radial-gradient(1200px 600px at 10% -10%, #cfe3d8 0%, transparent 55%), radial-gradient(900px 500px at 100% 0%, #d9e4ef 0%, transparent 50%), linear-gradient(180deg, #eef3f0 0%, var(--bg) 40%, #dfe8e2 100%);-webkit-font-smoothing:antialiased;background-attachment:fixed;margin:0}button,input{font:inherit}a{color:inherit}.app-shell{max-width:560px;min-height:100dvh;padding-bottom:calc(var(--tab-h) + var(--safe-bottom) + 12px);margin:0 auto;position:relative}.app-shell.map-mode{padding-bottom:0}.topbar{z-index:40;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--line);background:#e7eee9c7;padding:14px 18px 10px;position:sticky;top:0}.brand{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.brand h1{font-family:var(--font-display);letter-spacing:-.03em;margin:0;font-size:1.65rem;font-weight:700}.brand .meta{color:var(--muted);font-size:.78rem;font-weight:600}.filter-stack{gap:8px;margin-top:8px;display:grid}.filters{flex-wrap:wrap;gap:8px;padding:0;display:flex}.filters-secondary{padding-bottom:2px}.chip{border:1px solid var(--line);background:var(--surface);color:var(--ink);white-space:nowrap;border-radius:999px;flex:none;padding:7px 12px;font-size:.78rem;font-weight:600;transition:transform .18s,background .18s,color .18s}.chip:active{transform:scale(.97)}.chip.active{background:var(--bg-deep);color:#f4f7f5;border-color:#0000}.chip.soft.active{background:var(--accent)}.list{gap:14px;padding:12px 14px 24px;display:grid}.card{border-radius:var(--radius);background:var(--surface-solid);box-shadow:var(--shadow);color:inherit;border:1px solid #fff9;grid-template-rows:190px auto;text-decoration:none;transition:transform .2s;animation:.45s both rise;display:grid;overflow:hidden}.card:active{transform:scale(.985)}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}.card-media{background:#c5d2cb;position:relative;overflow:hidden}.card-media img{object-fit:cover;width:100%;height:100%;display:block}.badge-row{flex-wrap:wrap;gap:6px;display:flex;position:absolute;top:12px;left:12px}.badge{color:#f5f8f6;letter-spacing:.04em;text-transform:uppercase;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0f1c18c7;border-radius:999px;padding:5px 8px;font-size:.68rem;font-weight:700}.badge.warm{background:#c47a3aeb}.badge.mint{background:#1f6b4fe6}.card-body{padding:14px 16px 16px}.price{font-family:var(--font-display);letter-spacing:-.02em;margin:0 0 4px;font-size:1.35rem;font-weight:700}.title{margin:0;font-size:1rem;font-weight:700}.subtitle{color:var(--muted);margin:4px 0 0;font-size:.86rem}.chips{flex-wrap:wrap;gap:6px;margin-top:12px;display:flex}.pill{background:var(--accent-soft);color:var(--accent);border-radius:999px;padding:5px 10px;font-size:.72rem;font-weight:700}.pill.muted{color:var(--muted);background:#13201b0f}.pill.warn{color:#8a4f1a;background:#f4e3d4}.empty{text-align:center;color:var(--muted);padding:48px 24px}.empty h2{font-family:var(--font-display);color:var(--ink);margin:0 0 8px}.tabbar{width:min(560px,100%);height:calc(var(--tab-h) + var(--safe-bottom));padding:10px 18px calc(10px + var(--safe-bottom));-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);z-index:50;background:#0f1c18eb;grid-template-columns:1fr 1fr 1fr;gap:8px;display:grid;position:fixed;bottom:0;left:50%;transform:translate(-50%)}.tab{color:#f4f7f58c;background:0 0;border:0;border-radius:16px;place-items:center;gap:2px;font-size:.8rem;font-weight:700;display:grid}.tab.active{color:#fff;background:#ffffff1a}.tab span.icon{font-size:1.1rem;line-height:1}.map-wrap{border-radius:0;height:calc(100dvh - 118px);overflow:hidden}.map-wrap .leaflet-container{width:100%;height:100%;font-family:var(--font-body)}.login{place-items:center;min-height:100dvh;padding:24px;display:grid}.login-card{width:min(400px,100%);box-shadow:var(--shadow);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#f7faf8e6;border:1px solid #ffffffb3;border-radius:28px;padding:28px 24px 24px}.login-card h1{font-family:var(--font-display);letter-spacing:-.04em;margin:0;font-size:2.4rem}.login-card p{color:var(--muted);margin:8px 0 22px;line-height:1.45}.login-card input{border:1px solid var(--line);background:#fff;border-radius:14px;width:100%;margin-bottom:12px;padding:14px 16px}.login-card button{background:var(--bg-deep);color:#fff;border:0;border-radius:14px;width:100%;padding:14px 16px;font-weight:700}.error{color:var(--danger);margin:0 0 10px;font-size:.85rem}.sources{gap:12px;padding:14px;display:grid}.source-card{background:var(--surface-solid);border:1px solid var(--line);border-radius:18px;padding:14px}.source-card h3{margin:0 0 4px;font-size:.95rem}.source-card p{color:var(--muted);word-break:break-all;margin:0;font-size:.78rem}.source-actions{gap:8px;margin-top:10px;display:flex}.source-actions button,.panel-actions button{background:var(--accent-soft);color:var(--accent);border:0;border-radius:12px;padding:10px 12px;font-size:.8rem;font-weight:700}.source-actions button.danger{color:var(--danger);background:#f6e4e1}.panel-actions{flex-wrap:wrap;gap:8px;display:flex}.add-form{background:var(--surface-solid);border:1px solid var(--line);border-radius:18px;gap:8px;padding:14px;display:grid}.add-form input,.add-form select{border:1px solid var(--line);background:#fff;border-radius:12px;padding:12px}.popup-card{min-width:180px}.popup-card strong{font-family:var(--font-display);font-size:1.05rem;display:block}.skeleton{border-radius:var(--radius);background:linear-gradient(90deg,#d7e0db,#eef3f0,#d7e0db) 0 0/200% 100%;height:220px;animation:1.2s linear infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}.detail-sheet{z-index:80;background:#0f1c1873;align-items:end;display:grid;position:fixed;inset:0}.detail-panel{background:var(--surface-solid);max-height:88dvh;padding-bottom:calc(24px + var(--safe-bottom));border-radius:28px 28px 0 0;animation:.3s rise;overflow:auto}.detail-media{background:#c5d2cb;height:240px}.detail-media img{object-fit:cover;width:100%;height:100%}.detail-body{padding:18px 18px 0}.detail-body .cta{text-align:center;background:var(--bg-deep);color:#fff;border-radius:14px;margin-top:16px;padding:14px;font-weight:700;text-decoration:none;display:block}.close-sheet{color:#fff;background:#0f1c18b3;border:0;border-radius:999px;width:36px;height:36px;font-weight:700;position:absolute;top:14px;right:14px}.toast{left:50%;bottom:calc(var(--tab-h) + var(--safe-bottom) + 16px);z-index:90;background:var(--bg-deep);color:#f4f7f5;box-shadow:var(--shadow);border-radius:14px;max-width:min(480px,100% - 24px);padding:12px 16px;font-size:.85rem;font-weight:600;animation:.25s rise;position:fixed;transform:translate(-50%)}
