/* R122 宠物疫苗驱虫打卡 */
:root {
  --primary: #4CAF84; --secondary: #FFB74D; --accent: #7C4DFF; --warning: #EF5350;
  --bg: #F5F7FA; --card-bg: #FFF; --text: #2C3E50; --text-light: #7F8C8D;
  --radius-card: 16px; --radius-btn: 12px; --shadow-card: 0 2px 12px rgba(0,0,0,.08);
  --contact-footer-h: 50px;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{font-size:16px;-webkit-text-size-adjust:100%}
body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif;background:var(--bg);color:var(--text);line-height:1.5;padding-bottom:calc(var(--contact-footer-h) + 16px + env(safe-area-inset-bottom))}
body.share-page,body.invite-page{padding-bottom:calc(var(--contact-footer-h) + 16px + env(safe-area-inset-bottom))}
button,input,select{font:inherit;border:none;background:none;cursor:pointer}
a{color:inherit;text-decoration:none}
.hidden{display:none!important}

#skeleton .sk-bar{height:56px;margin:12px;background:#d4edda;border-radius:12px;animation:shimmer 1.2s infinite}
#skeleton .sk-ring{width:120px;height:120px;margin:24px auto;border-radius:50%;background:#d4edda;animation:shimmer 1.2s infinite}
@keyframes shimmer{0%,100%{opacity:.6}50%{opacity:1}}

.top-bar{position:sticky;top:0;z-index:90;background:var(--card-bg);box-shadow:var(--shadow-card);padding:12px 12px 8px}
.app-title{font-size:1.1rem;font-weight:700;margin-bottom:10px}
.pet-switcher{display:flex;align-items:center;gap:8px}
.pet-cards{display:flex;gap:8px;overflow-x:auto;flex:1;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory;padding:4px 0}
.pet-card{flex:0 0 auto;width:72px;scroll-snap-align:center;padding:8px 6px;border-radius:14px;background:var(--bg);text-align:center;border:2px solid transparent;transition:transform .2s}
.pet-card.active{border-color:var(--primary);transform:scale(1.05);background:var(--card-bg);box-shadow:var(--shadow-card)}
.pet-emoji{font-size:1.6rem;display:block}
.pet-name{font-size:.75rem;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.add-pet-btn{width:44px;height:44px;border-radius:50%;background:var(--primary);color:#fff;font-size:1.4rem;flex-shrink:0}
.hospital-card{margin-top:10px;padding:10px 12px;border-radius:12px;background:linear-gradient(135deg,var(--primary),var(--accent));color:#fff;font-size:.85rem}
.hospital-card a{color:#fff;text-decoration:underline}

.dashboard{padding:12px}
.status-card{display:flex;align-items:center;gap:12px;background:var(--card-bg);border-radius:var(--radius-card);padding:14px;box-shadow:var(--shadow-card);margin-bottom:12px}
.pet-avatar{font-size:2.4rem}
.pet-info h2{font-size:1.1rem}
.pet-info p{font-size:.85rem;color:var(--text-light)}
.health-badge{margin-left:auto;padding:6px 10px;border-radius:20px;font-weight:700;font-size:.9rem;background:var(--bg)}
.health-badge[data-level="good"]{color:var(--primary)}
.health-badge[data-level="fair"]{color:var(--secondary)}
.health-badge[data-level="low"]{color:var(--warning)}

.countdown-ring{position:relative;width:140px;height:140px;margin:0 auto 16px;text-align:center}
.countdown-ring svg{width:120px;height:120px;display:block;margin:0 auto}
.ring-bg{fill:none;stroke:#E8E8E8;stroke-width:8}
.ring-progress{fill:none;stroke:var(--primary);stroke-width:8;stroke-linecap:round;transform:rotate(-90deg);transform-origin:center;transition:stroke-dashoffset .6s ease}
.ring-label{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);font-size:.75rem;padding:0 16px;color:var(--text-light);line-height:1.3}

.timeline{padding:0 12px 12px 28px;position:relative}
.timeline::before{content:'';position:absolute;left:14px;top:4px;bottom:4px;width:3px;background:#E0E0E0;border-radius:2px}
.tl-item{position:relative;margin-bottom:14px;padding-left:8px}
.tl-dot{position:absolute;left:-20px;top:6px;width:10px;height:10px;border-radius:50%;background:#BDBDBD}
.tl-item.done .tl-dot{background:var(--primary)}
.tl-item.soon .tl-dot{background:var(--secondary);animation:pulse 2s infinite}
.tl-item.overdue .tl-dot{background:var(--warning);animation:pulse 1s infinite}
.tl-item strong{font-size:.9rem}
.tl-item p{font-size:.8rem;color:var(--text-light)}
.empty{text-align:center;color:var(--text-light);padding:16px}

.quick-actions{display:flex;flex-wrap:wrap;gap:8px;padding:0 12px 12px}
.action-btn{flex:1 1 calc(50% - 4px);min-width:120px;padding:12px 10px;border-radius:var(--radius-btn);background:var(--primary);color:#fff;font-size:.9rem;font-weight:600}
.action-btn:active{transform:scale(.97)}

.visualization{background:var(--card-bg);margin:0 12px 12px;border-radius:var(--radius-card);box-shadow:var(--shadow-card);overflow:hidden}
.viz-tabs{display:flex;gap:6px;padding:10px}
.viz-tabs button{flex:1;padding:8px;border-radius:20px;background:var(--bg);font-size:.8rem}
.viz-tabs button.active{background:var(--primary);color:#fff}
.viz-view{padding:12px;min-height:120px}
.heatmap{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.hm-cell{aspect-ratio:1;border-radius:4px}
.hm-legend{text-align:center;font-size:.75rem;color:var(--text-light);margin-top:8px}
.health-panel{text-align:center;padding:12px}
.health-big{font-size:3rem;font-weight:700;color:var(--primary)}
.badge{display:inline-block;margin:4px;padding:4px 10px;border-radius:12px;background:var(--bg);font-size:.8rem}

.modal{position:fixed;inset:0;z-index:200;display:flex;align-items:flex-end;justify-content:center;pointer-events:none;opacity:0;transition:opacity .25s}
.modal.open{pointer-events:auto;opacity:1}
.modal-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.45)}
.modal-sheet{position:relative;width:100%;max-width:480px;max-height:85vh;overflow-y:auto;background:var(--card-bg);border-radius:20px 20px 0 0;padding:20px 16px calc(20px + env(safe-area-inset-bottom));transform:translateY(100%);transition:transform .3s}
.modal.open .modal-sheet{transform:translateY(0)}
.modal-close{position:absolute;top:12px;right:12px;width:32px;height:32px;border-radius:50%;background:var(--bg);font-size:1rem}
.passport-sheet{max-height:90vh}
#form-steps h3{margin-bottom:12px}
.chip{display:inline-block;margin:4px 6px 4px 0;padding:10px 14px;border-radius:20px;background:var(--bg);font-size:.9rem}
.chip.active{background:var(--primary);color:#fff}
.btn-primary,.btn-cta,.btn-outline{display:inline-block;width:100%;margin-top:10px;padding:12px;border-radius:var(--radius-btn);font-weight:600;text-align:center}
.btn-primary,.btn-cta{background:var(--primary);color:#fff}
.btn-outline{border:2px solid var(--primary);color:var(--primary);background:var(--card-bg)}
.warn{color:var(--warning);font-size:.85rem;margin:8px 0}
label{display:block;margin-bottom:12px;font-weight:600;font-size:.9rem}
label input,label select{width:100%;margin-top:6px;padding:10px;border:1px solid #ddd;border-radius:10px}

.passport-wallet{border-radius:16px;overflow:hidden;box-shadow:var(--shadow-card)}
.pw-header{display:flex;align-items:center;gap:12px;padding:20px;color:#fff}
.pw-emoji{font-size:2.5rem}
.pw-body{padding:16px}
.pw-body h4{margin:12px 0 6px;font-size:.95rem}
.pw-body ul{padding-left:18px;font-size:.85rem;color:var(--text-light)}
.pw-tip{margin-top:12px;padding:10px;border-radius:10px;background:var(--bg);font-size:.85rem}
.passport-card .passport-header{font-size:1.2rem;font-weight:700;margin-bottom:4px}
.passport-sub{color:var(--text-light);margin-bottom:12px}

.celebration-overlay{position:fixed;inset:0;z-index:300;display:flex;align-items:center;justify-content:center;pointer-events:none;background:rgba(255,255,255,.3)}
.paw-stamp{font-size:4rem;animation:stamp .5s cubic-bezier(.68,-.55,.27,1.55) forwards}
.particle{position:absolute;width:8px;height:8px;border-radius:50%;background:var(--primary);animation:particle 1s ease-out forwards}
@keyframes stamp{0%{transform:scale(0);opacity:0}60%{transform:scale(1.2);opacity:1}100%{transform:scale(1);opacity:1}}
@keyframes particle{0%{opacity:1;transform:translate(0,0)}100%{opacity:0;transform:translate(20px,-60px)}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}

.share-readonly .quick-actions,.share-readonly .add-pet-btn{display:none}

.share-main,.invite-main{max-width:420px;margin:0 auto;padding:24px 16px}
.share-hero,.invite-card{text-align:center;background:var(--card-bg);border-radius:var(--radius-card);padding:24px 16px;box-shadow:var(--shadow-card)}
.share-icon{font-size:3rem;margin-bottom:12px}
.share-hero h1,.invite-card h1{font-size:1.3rem;margin-bottom:8px}
.share-features{list-style:none;text-align:left;margin:16px auto;max-width:260px;font-size:.9rem;color:var(--text-light)}
.share-features li{margin:6px 0}
.share-qr-block{margin-top:16px}
#share-qr,#invite-qr{margin:16px auto}
.invite-from{color:var(--text-light);font-size:.9rem;margin-bottom:8px}

.contact-footer{position:fixed;left:0;right:0;bottom:0;background:#fff;border-top:1px solid #e2e8f0;padding:5px 10px calc(5px + env(safe-area-inset-bottom));z-index:100;min-height:var(--contact-footer-h)}
.contact-footer__btns{display:flex;gap:6px;justify-content:center;max-width:320px;margin:0 auto}
.contact-footer__cta,.contact-footer__btn{flex:1;max-width:96px;text-align:center;padding:6px 6px;border-radius:8px;font-size:12px;line-height:1.2;white-space:nowrap}
.contact-footer__cta{background:var(--primary);color:#fff;font-weight:600}
.contact-footer__btn{border:1px solid #cbd5e1;background:#fff}
.contact-footer__brand{text-align:center;font-size:10px;color:#94a3b8;margin-top:3px}

.toast{position:fixed;left:50%;bottom:calc(var(--contact-footer-h) + 20px);transform:translateX(-50%) translateY(20px);background:rgba(44,62,80,.92);color:#fff;padding:10px 18px;border-radius:20px;font-size:.9rem;opacity:0;transition:all .25s;z-index:400;pointer-events:none}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.ok{background:var(--primary)}
.toast.warn{background:var(--warning)}
