:root{--ink:#14261F;--muted:#5B6B64;--text:#14261F;--border:#DCE5DF;--paper:#F4F8F5;--card:#fff;--forest:#0F5A46;--forest-2:#0B4A39;--mint:#DDF0E6;--sun:#FFB020;--sun-2:#FFE3A6;--coral:#D9482B;
--r:16px;--shadow:0 1px 2px rgba(15,60,45,.06),0 8px 24px -8px rgba(15,60,45,.14);
--display:'Bricolage Grotesque','Segoe UI',system-ui,sans-serif;--body:'DM Sans','Segoe UI',system-ui,sans-serif}
*{box-sizing:border-box}
body{margin:0;font-family:var(--body);color:var(--ink);background:var(--paper);line-height:1.55;min-height:100vh;display:flex;flex-direction:column}
main,.container{width:100%;max-width:1120px;margin:0 auto;padding:32px 20px 56px;flex:1}
h1,h2,h3{font-family:var(--display);letter-spacing:-.02em;line-height:1.1}
a{color:var(--forest)}
:focus-visible{outline:3px solid var(--sun);outline-offset:2px}
/* ---- live impact banner ---- */
.ticker{background:var(--forest-2);color:#fff;font-size:.9rem;height:40px;display:flex;align-items:center;justify-content:center;gap:10px;overflow:hidden;padding:0 16px}
.ticker .dot{width:8px;height:8px;border-radius:50%;background:var(--sun);flex:none;animation:pulse 1.8s infinite}
.ticker .msgs{position:relative;height:22px;flex:0 1 640px;overflow:hidden}
.ticker .msg{position:absolute;inset:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;opacity:0;transform:translateY(100%);transition:opacity .5s,transform .5s}
.ticker .msg.on{opacity:1;transform:none}.ticker .msg.off{opacity:0;transform:translateY(-100%)}
.ticker b{color:var(--sun)}
@keyframes pulse{50%{box-shadow:0 0 0 6px rgba(255,176,32,0)}0%{box-shadow:0 0 0 0 rgba(255,176,32,.6)}}
@media (prefers-reduced-motion:reduce){.ticker .msg{transition:none}.ticker .dot{animation:none}}
/* ---- nav ---- */
.nav{position:sticky;top:0;z-index:20;background:rgba(255,255,255,.92);backdrop-filter:blur(10px);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:12px max(20px,calc((100% - 1120px)/2));gap:16px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px;font:800 1.35rem var(--display);color:var(--forest);text-decoration:none;letter-spacing:-.03em}
.brand img{width:36px;height:36px;border-radius:10px}
.nav-links{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.nav-links>a:not(.btn){color:var(--ink);text-decoration:none;font-weight:500;padding:8px 12px;border-radius:10px}
.nav-links>a:not(.btn):hover{background:var(--mint)}
.user-chip{display:flex;align-items:center;gap:8px;font-weight:500;margin:0 6px}
.avatar{width:32px;height:32px;border-radius:50%;background:var(--sun);color:var(--ink);display:grid;place-items:center;font-weight:700}
/* ---- buttons ---- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font:700 .95rem var(--body);padding:11px 20px;border-radius:12px;border:2px solid transparent;cursor:pointer;text-decoration:none;transition:transform .12s,background .15s}
.btn:active{transform:scale(.98)}
.btn-primary{background:var(--forest);color:#fff}.btn-primary:hover{background:var(--forest-2)}
.btn-sun{background:var(--sun);color:var(--ink)}.btn-sun:hover{background:#ffc04d}
.btn-outline{background:#fff;border-color:var(--border);color:var(--ink)}.btn-outline:hover{border-color:var(--forest)}
.btn-danger{background:#fff;border-color:#f0c4ba;color:var(--coral)}.btn-danger:hover{background:#fdeeea}
.btn-block{display:flex;width:100%}.btn[disabled]{opacity:.55;cursor:not-allowed}
/* ---- hero ---- */
.hero{background:radial-gradient(900px 300px at 85% -10%,rgba(255,176,32,.35),transparent),linear-gradient(135deg,#0F5A46,#0B3F32);color:#fff;padding:64px 20px 72px}
.hero-in{max-width:1120px;margin:0 auto}
.hero h1{font-size:clamp(2.3rem,6vw,4rem);margin:0 0 16px;max-width:14ch}
.hero p{font-size:1.15rem;max-width:52ch;color:#CFE6DB;margin:0 0 28px}
.hero-cta{display:flex;gap:12px;flex-wrap:wrap}
.hero .btn-outline{background:transparent;color:#fff;border-color:rgba(255,255,255,.45)}
.stats{display:flex;gap:36px;margin-top:40px;flex-wrap:wrap}
.stat b{display:block;font:800 2rem var(--display);color:var(--sun)}.stat span{font-size:.9rem;color:#CFE6DB}
/* ---- browse ---- */
.toolbar{display:flex;gap:10px;flex-wrap:wrap;background:#fff;padding:12px;border-radius:var(--r);box-shadow:var(--shadow);margin:-52px 0 28px;position:relative}
.toolbar input,.toolbar select{flex:1 1 180px}
input,select,textarea{font:inherit;padding:11px 14px;border:1.5px solid var(--border);border-radius:12px;background:#fff;color:var(--ink);width:100%}
.toolbar input,.toolbar select{width:auto}
input:focus,select:focus,textarea:focus{border-color:var(--forest);outline:none;box-shadow:0 0 0 3px var(--mint)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:22px}
.item-card{background:#fff;border-radius:var(--r);overflow:hidden;box-shadow:var(--shadow);display:flex;flex-direction:column;transition:transform .18s,box-shadow .18s;border:1px solid var(--border)}
.item-card:hover{transform:translateY(-4px)}
.item-img{width:100%;aspect-ratio:4/3;object-fit:cover;display:grid;place-items:center;font-size:3rem;background:linear-gradient(135deg,var(--mint),var(--sun-2));color:var(--forest)}
.item-body{padding:14px 16px 16px;display:flex;flex-direction:column;gap:6px}
.item-title{font:700 1.08rem var(--display)}.item-meta{color:var(--muted);font-size:.88rem}
.badge{display:inline-block;align-self:flex-start;font-size:.78rem;font-weight:700;padding:3px 10px;border-radius:99px;background:var(--mint);color:var(--forest)}
.badge.claimed{background:var(--sun-2);color:#7A5200}.badge.given{background:#E7E9E8;color:#4A5651}
.empty-state{text-align:center;color:var(--muted);padding:56px 0}
/* ---- forms / cards ---- */
.card{background:#fff;border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--shadow);padding:28px}
.form-card{max-width:620px;margin:0 auto}
.auth-wrap{max-width:440px;margin:0 auto}.auth-wrap .sub,.hint{color:var(--muted);font-size:.92rem}
.field{margin-bottom:16px}.field label{display:block;font-weight:700;margin-bottom:6px;font-size:.92rem}
.error-box,.success-box{padding:12px 14px;border-radius:12px;margin-bottom:14px;font-size:.93rem}
.error-box{background:#FDEEEA;color:#8F2A15;border:1px solid #F0C4BA}.success-box{background:var(--mint);color:var(--forest-2);border:1px solid #B9DCC9}
.spinner{width:14px;height:14px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;display:inline-block;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
/* ---- item page ---- */
.detail-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:36px}
.detail-img{width:100%;border-radius:var(--r);box-shadow:var(--shadow);aspect-ratio:4/3;object-fit:cover}
.claim-row{border:1px solid var(--border);border-radius:12px;padding:12px 14px;margin-bottom:10px;background:#fff}
.claim-row .btn{margin-top:10px;padding:8px 14px}
.notice{background:var(--sun-2);color:#5C3F00;border-radius:12px;padding:12px 14px;margin-bottom:12px;font-size:.93rem}
@media(max-width:760px){.detail-grid{grid-template-columns:1fr}.toolbar{margin-top:-36px}}
/* ---- footer ---- */
.footer{background:var(--forest-2);color:#B9D3C7;margin-top:auto;padding:36px 20px 24px;font-size:.92rem}
.footer-in{max-width:1120px;margin:0 auto;display:flex;justify-content:space-between;gap:24px;flex-wrap:wrap}
.footer .brand{color:#fff;font-size:1.15rem}.footer a{color:#fff;text-decoration:none;margin-right:16px}.footer a:hover{text-decoration:underline}
.footer .legal{max-width:1120px;margin:22px auto 0;padding-top:16px;border-top:1px solid rgba(255,255,255,.14);font-size:.85rem}

/* ---- profile menu ---- */
.profile{position:relative}.profile summary{list-style:none;display:flex;align-items:center;gap:8px;cursor:pointer;padding:4px 10px 4px 4px;border-radius:99px;border:1.5px solid var(--border);font-weight:500}
.profile summary::-webkit-details-marker{display:none}.profile[open] summary,.profile summary:hover{border-color:var(--forest)}
.menu{position:absolute;right:0;top:calc(100% + 8px);min-width:220px;background:#fff;border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow);padding:6px;z-index:30}
.menu a,.menu button{display:block;width:100%;text-align:left;padding:10px 12px;border:0;background:none;font:500 .95rem var(--body);color:var(--ink);text-decoration:none;border-radius:10px;cursor:pointer}
.menu a:hover,.menu button:hover{background:var(--mint)}.menu button{color:var(--coral)}
.menu-head{padding:8px 12px 10px;border-bottom:1px solid var(--border);margin-bottom:4px;font-size:.95rem}.menu-head span{color:var(--muted);font-size:.83rem}
@media(max-width:520px){.pname{display:none}}
/* ---- chat ---- */
.chat{border:1px solid var(--border);border-radius:14px;background:#fff;overflow:hidden;margin-top:12px}
.chat-log{height:260px;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:8px;background:var(--paper)}
.bubble{max-width:80%;padding:8px 12px;border-radius:14px;background:#fff;border:1px solid var(--border);align-self:flex-start;word-break:break-word;white-space:pre-wrap}
.bubble.me{align-self:flex-end;background:var(--forest);color:#fff;border-color:var(--forest)}
.bubble small{display:block;font-size:.72rem;opacity:.7;margin-top:2px}
.chat-form{display:flex;gap:8px;padding:10px;border-top:1px solid var(--border)}.chat-form .btn{padding:9px 18px}
.chat-closed{padding:10px 14px;color:var(--muted);font-size:.9rem;border-top:1px solid var(--border)}
.claim-actions{display:flex;gap:8px;flex-wrap:wrap}
/* ---- maps ---- */
.map{height:280px;border-radius:14px;border:1px solid var(--border);margin:8px 0;z-index:0}
.map-tools{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:.9rem;color:var(--muted)}

[hidden]{display:none!important}
.bell-wrap{position:relative}.bell{position:relative;background:none;border:1.5px solid var(--border);width:42px;height:42px;border-radius:50%;display:grid;place-items:center;cursor:pointer;color:var(--ink)}
.bell:hover{border-color:var(--forest)}.bell-badge{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;border-radius:9px;background:var(--coral);color:#fff;font:700 .7rem var(--body);display:grid;place-items:center}
.notif{width:340px;max-width:calc(100vw - 24px);max-height:400px;overflow-y:auto;padding:6px}
.notif-item{display:flex!important;flex-direction:column;gap:2px;border-left:3px solid transparent}.notif-item small{color:var(--muted)}
.notif-item.unread{background:var(--mint);border-left-color:var(--forest);font-weight:500}.notif-empty{padding:18px;text-align:center;color:var(--muted);margin:0}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media(max-width:520px){.grid2{grid-template-columns:1fr}}
.or{text-align:center;color:var(--muted);font-size:.85rem;margin:0 0 12px}
.map-search{display:flex;gap:8px;margin-bottom:8px}.map-search input{flex:1}
