:root{--color-primary:#4caf50;--color-primary-dark:#388e3c;--color-surface:#fff;--color-background:#fafafa;--color-text-primary:#212121;--color-text-secondary:#757575;--color-danger:#ef5350;--color-warning:#ffa726;--color-tint-green:#e8f5e9;--color-tint-red:#fce8e6;--color-warning-bg:#fff3e0;--color-divider:#eee;--color-badge-bronze:#a1887f;--color-badge-silver:#b0bec5;--color-badge-gold:#ffd54f;--font-size-child-h1:28px;--font-size-child-body:18px;--font-size-toddler-h1:32px;--font-size-toddler-body:22px;--font-size-parent-h1:24px;--font-size-parent-body:16px}body{background:var(--color-background);color:var(--color-text-primary);margin:0;font-family:PingFang SC,Microsoft YaHei,sans-serif}.shell,.auth-shell{box-sizing:border-box;min-height:100vh;padding:48px 24px}.auth-shell{text-align:center;max-width:480px;margin:0 auto}.auth-shell form{text-align:left;gap:16px;display:grid}.auth-shell label{font-size:var(--font-size-parent-body);gap:6px;display:grid}.auth-shell input,.auth-shell button{box-sizing:border-box;min-height:48px;font:inherit;border-radius:12px}.auth-shell input{border:1px solid var(--color-primary-dark);padding:8px}.auth-shell button{background:var(--color-primary);color:var(--color-surface);border:0;padding:8px 16px}.auth-shell button.secondary{background:var(--color-surface);color:var(--color-primary-dark);border:1px solid var(--color-primary-dark);margin-top:12px}.child-cards{grid-template-columns:1fr 1fr;gap:12px;margin:20px 0;display:grid}.child-cards button{background:var(--color-surface);color:var(--color-text-primary);border:2px solid #0000;gap:4px;display:grid}.child-cards button.selected{border-color:var(--color-primary)}.task-card{border:1px solid var(--color-primary-dark);background:var(--color-surface);text-align:left;border-radius:12px;gap:4px;padding:14px;display:grid}.task-icon{font-size:1.5rem;line-height:1}.task-meta{color:var(--color-text-secondary);font-size:var(--font-size-child-body)}.points-summary{border:1px solid var(--color-primary-dark);background:var(--color-surface);text-align:left;border-radius:12px;gap:12px;padding:20px;display:grid}.points-summary progress{width:100%;accent-color:var(--color-primary)}.child-card-placeholder{border:2px dashed var(--color-primary-dark);border-radius:12px;grid-column:1/-1;place-items:center;min-height:96px;display:grid}.pin-grid{grid-template-columns:repeat(4,1fr);gap:14px;max-width:260px;margin:16px auto;display:grid}.pin-grid button{background:var(--color-surface);border:2px solid var(--color-primary-dark);border-radius:50%;justify-self:center;width:48px;height:48px;min-height:48px;padding:0}.pin-grid button.lit{background:var(--color-primary)}.auth-shell[data-age-mode=toddler] .child-cards button,.auth-shell[data-age-mode=toddler] .pin-grid button,.auth-shell[data-age-mode=toddler] button{min-height:56px}.auth-shell[data-age-mode=toddler] .pin-grid button{width:56px;height:56px}.auth-shell[data-age-mode=toddler] .task-card{text-align:center;place-items:center;min-height:120px}.auth-shell[data-age-mode=toddler] .task-icon{font-size:3rem}.auth-shell[data-age-mode=toddler] .task-card strong{font-size:var(--font-size-child-h1)}.quiz-read-button{margin:8px 0}.quiz-options-grid{grid-template-columns:repeat(2,minmax(88px,1fr));gap:12px;margin-top:12px;display:grid}.auth-shell[data-age-mode=toddler] .quiz-option{background:var(--color-surface);min-width:88px;min-height:88px;color:var(--color-text-primary);border:2px solid var(--color-primary-dark);font-size:var(--font-size-toddler-body);place-items:center;gap:4px;padding:12px;display:grid}.auth-shell[data-age-mode=toddler] .quiz-option.selected{border-color:var(--color-primary);border-width:4px}.quiz-option-icon{font-size:2rem;line-height:1}.shell h1{color:var(--color-primary-dark);font-size:var(--font-size-child-h1)}.shell[data-audience=parent] h1{font-size:var(--font-size-parent-h1)}.eyebrow{color:var(--color-primary);font-size:var(--font-size-child-body)}.auth-shell select{box-sizing:border-box;border:1px solid var(--color-primary-dark);min-height:48px;font:inherit;background:var(--color-surface);border-radius:12px;padding:8px}.auth-shell .caption{color:var(--color-text-secondary);font-size:var(--font-size-parent-body);text-align:left}.auth-shell .sunday-banner{border:1px solid var(--color-primary-dark);background:var(--color-surface);color:var(--color-primary-dark);text-align:left;border-radius:12px;margin:0 0 16px;padding:12px}.todo-reminder{border:1px solid var(--color-warning);background:var(--color-warning-bg);color:var(--color-text-primary);text-align:left;font-size:var(--font-size-child-body);border-radius:12px;margin:0 0 16px;padding:12px 14px}.todo-reminder-done{border-color:var(--color-primary);background:var(--color-tint-green)}.auth-shell[data-age-mode=toddler] .todo-reminder{font-size:var(--font-size-toddler-body);text-align:center}.auth-shell button:disabled{opacity:.5}.reward-track{text-align:left;gap:12px;margin:20px 0;display:grid}.reward-track h2{color:var(--color-primary-dark);font-size:var(--font-size-child-body);margin:0}.task-card-rollover{border-color:var(--color-primary);background:var(--color-warning-bg)}.task-card-overdue{border-color:var(--color-danger);background:var(--color-tint-red)}.child-nav-links{flex-wrap:wrap;justify-content:center;gap:12px;margin:16px 0;display:flex}.child-nav-links a{color:var(--color-primary-dark)}.celebration-overlay{background:color-mix(in srgb, var(--color-text-primary) 35%, transparent);z-index:20;place-items:center;animation:.24s ease-out celebration-fade;display:grid;position:fixed;inset:0}.celebration-card{background:var(--color-surface);border:2px solid var(--color-primary);text-align:center;border-radius:16px;width:min(360px,90vw);padding:24px;animation:.36s cubic-bezier(.2,.9,.3,1.2) celebration-pop}.celebration-burst{margin:0;font-size:2rem;animation:.4s ease-in-out celebration-spin}.celebration-badges{flex-wrap:wrap;justify-content:center;gap:8px;margin:12px 0 0;padding:0;list-style:none;display:flex}.celebration-badges li{background:color-mix(in srgb, var(--color-primary) 12%, var(--color-surface));border:1px solid color-mix(in srgb, var(--color-primary) 35%, transparent);font-size:var(--font-size-child-body);border-radius:999px;align-items:center;gap:6px;margin:0;padding:6px 10px;display:inline-flex}.celebration-mute{font-size:var(--font-size-child-body);justify-content:center;align-items:center;gap:8px;margin:12px 0;display:flex}.growth-section{text-align:left;background:var(--color-surface);border:1px solid var(--color-primary-dark);border-radius:12px;margin:20px 0;padding:16px}.growth-section h2{color:var(--color-primary-dark);font-size:var(--font-size-child-body);margin:0 0 8px}.growth-streak{color:var(--color-primary);margin:0 0 8px;font-size:1.5rem;font-weight:600}.badge-wall{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.badge-item{border:1px solid var(--color-divider);background:var(--color-background);opacity:.7;border-radius:12px;gap:4px;padding:10px;display:grid}.badge-item.unlocked{opacity:1}.badge-item.unlocked.badge-gold{border-color:var(--color-badge-gold);background:color-mix(in srgb, var(--color-badge-gold) 35%, var(--color-surface))}.badge-item.unlocked.badge-silver{border-color:var(--color-badge-silver);background:color-mix(in srgb, var(--color-badge-silver) 35%, var(--color-surface))}.badge-item.unlocked.badge-bronze{border-color:var(--color-badge-bronze);background:color-mix(in srgb, var(--color-badge-bronze) 35%, var(--color-surface))}.family-goal-bar{background:var(--color-divider);border-radius:999px;height:12px;margin:8px 0;overflow:hidden}.family-goal-bar i{background:linear-gradient(90deg, var(--color-primary), var(--color-primary-dark));height:100%;display:block}.family-contrib{gap:4px;margin:8px 0 0;padding:0;list-style:none;display:grid}@keyframes celebration-fade{0%{opacity:0}to{opacity:1}}@keyframes celebration-pop{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}@keyframes celebration-spin{0%{transform:rotate(-12deg)scale(.8)}to{transform:rotate(0)scale(1)}}.dashboard-kids{gap:12px;margin:16px 0;display:grid}.dashboard-kid p{margin:4px 0}.review-card-urgent{border-color:var(--color-warning);background:var(--color-warning-bg)}.review-tabs{flex-wrap:wrap;gap:8px;margin:12px 0;display:flex}.review-tabs .tab{border:1px solid var(--color-primary-dark);background:var(--color-surface);min-height:40px;color:var(--color-primary-dark);border-radius:12px;padding:6px 12px}.review-tabs .tab.active{background:var(--color-primary);color:var(--color-surface);border-color:var(--color-primary)}.empty-state{color:var(--color-text-secondary);margin:16px 0}.dashboard-top{justify-content:space-between;align-items:center;gap:12px;display:flex}.dashboard-top h1{flex:1;margin:0}.notif-item.unread{border-color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 12%, var(--color-surface))}.profile-top{justify-content:space-between;align-items:center;gap:8px;display:flex;position:relative}.profile-top h1{flex:1;margin:0}.profile-leaf{object-fit:contain;width:64px;height:auto}.profile-card{background:var(--color-surface);border:1px solid color-mix(in srgb, var(--color-primary) 35%, transparent);text-align:left;border-radius:16px;grid-template-columns:1.2fr .8fr;align-items:center;gap:12px;margin:16px 0;padding:16px;display:grid}.profile-card-main{align-items:center;gap:12px;display:flex}.profile-avatar{background:color-mix(in srgb, var(--color-primary) 16%, var(--color-surface));border-radius:50%;place-items:center;width:64px;height:64px;font-size:2rem;display:grid}.profile-grade{background:color-mix(in srgb, var(--color-primary) 14%, var(--color-surface));color:var(--color-primary-dark);font-size:var(--font-size-child-body);border-radius:999px;margin:4px 0;padding:2px 10px;display:inline-block}.profile-tree{object-fit:contain;width:100%;max-height:140px}.profile-week-stats{grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0 20px;display:grid}.profile-stat{background:var(--color-surface);border:1px solid color-mix(in srgb, var(--color-primary) 30%, transparent);border-radius:12px;gap:4px;padding:12px 8px;display:grid}.profile-stat strong{color:var(--color-primary-dark);font-size:1.25rem}.profile-menu{text-align:left;gap:10px;display:grid}.profile-menu button{text-align:left;width:100%}.insights-header-art{object-fit:cover;border-radius:12px;width:100%;max-height:56px;margin:8px 0}.weekly-hero{text-align:left;min-height:140px;color:var(--color-primary-dark);background-position:top;background-size:cover;border-radius:0 0 20px 20px;margin:-24px -8px 16px;padding:20px 16px 28px}.weekly-hero h1{margin:8px 0 4px}.weekly-score{color:var(--color-accent,#ff9800);font-size:1.25rem;font-style:normal;font-weight:700}.weekly-praise{background:color-mix(in srgb, #ffb300 12%, var(--color-surface))}.page-hero{text-align:left;min-height:140px;color:var(--color-primary-dark);background-position:top;background-size:cover;border-radius:0 0 24px 24px;margin:-24px -8px 16px;padding:20px 16px 28px}.page-hero h1{text-shadow:0 1px #fff;margin:0 0 8px}.today-hero{min-height:180px}.today-hero-copy{background:#ffffffc7;border-radius:12px;max-width:55%;padding:8px}.ring-stats{grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0 20px;display:grid}.ring-stat{background:var(--color-surface);border:1px solid color-mix(in srgb, var(--color-primary) 28%, transparent);border-radius:16px;place-items:center;gap:6px;padding:12px 6px;display:grid}.ring-stat strong{background:radial-gradient(circle at center, var(--color-surface) 58%, transparent 59%), conic-gradient(var(--color-primary) var(--ring,0%), color-mix(in srgb, var(--color-primary) 18%, #fff) 0);width:64px;height:64px;color:var(--color-primary-dark);border-radius:50%;place-items:center;font-size:.95rem;display:grid}.ring-stat.ring-blue strong{background:radial-gradient(circle at center, var(--color-surface) 58%, transparent 59%), conic-gradient(#42a5f5 100%, #bbdefb 0)}.ring-stat.ring-orange strong{background:radial-gradient(circle at center, var(--color-surface) 58%, transparent 59%), conic-gradient(#ff9800 100%, #ffe0b2 0)}.ring-stat span{color:var(--color-text-secondary);font-size:.8rem}.child-bottom-nav{padding:10px 6px calc(10px + env(safe-area-inset-bottom,0));background:color-mix(in srgb, var(--color-surface) 92%, #fff);border-top:1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);z-index:5;grid-template-columns:repeat(4,1fr);gap:4px;margin:24px -8px 0;display:grid;position:sticky;bottom:0}.child-bottom-nav button{min-height:56px;color:var(--color-text-secondary);background:0 0;border:0;place-items:center;gap:2px;margin:0;padding:6px 2px;font-size:.72rem;display:grid}.child-bottom-nav button.active{color:var(--color-primary-dark);font-weight:700}.nav-icon{box-sizing:border-box;border:2px solid;width:21px;height:21px;display:block;position:relative}.family-ring{align-items:center;gap:14px;margin:12px 0;display:flex}.family-ring-chart{aspect-ratio:1;border-radius:50%;flex:none;place-items:center;width:92px;display:grid}.family-ring-chart span{aspect-ratio:1;background:var(--color-surface);border-radius:50%;place-items:center;width:58px;font-weight:700;display:grid}.family-ring-legend{gap:4px;display:grid}.family-ring-legend p{margin:0}.family-ring-legend i{border-radius:50%;width:9px;height:9px;margin-right:5px;display:inline-block}.nav-icon-quiz{border-radius:5px}.nav-icon-quiz:after{content:"";border:2px solid;border-radius:50%;width:5px;height:5px;position:absolute;top:4px;left:5px}.nav-icon-redeem{border-radius:5px}.nav-icon-redeem:before{content:"";border-top:2px solid;position:absolute;top:6px;left:-2px;right:-2px}.nav-icon-growth{border:0}.nav-icon-growth:before{content:"";border:2px solid;border-radius:50% 50% 45% 45%;width:17px;height:17px;position:absolute;top:0;left:0}.nav-icon-growth:after{content:"";border-left:2px solid;height:10px;position:absolute;bottom:-3px;left:9px}.nav-icon-profile{border-radius:50%}.nav-icon-profile:before{content:"";border:2px solid;border-radius:50%;width:6px;height:6px;position:absolute;top:2px;left:5px}.nav-icon-profile:after{content:"";border:2px solid;border-bottom:0;border-radius:8px 8px 0 0;width:11px;height:5px;position:absolute;bottom:2px;left:3px}.streak-heatmap{grid-template-columns:repeat(7,36px);justify-content:center;gap:5px;margin:12px 0;display:grid}.streak-heatmap i{background:color-mix(in srgb, var(--color-primary) 12%, #fff);border-radius:4px;width:36px;height:36px}.streak-heatmap i.lit{background:var(--color-primary)}.growth-heatmap-art{object-fit:cover;border-radius:12px;width:100%;max-height:120px}.points-summary.redeem-summary{grid-template-columns:1.2fr .8fr;align-items:center;display:grid}.points-jar{text-align:center;position:relative}.points-jar-visual{width:min(100%,150px);margin:0 auto;position:relative}.points-jar img{z-index:1;object-fit:contain;width:100%;max-height:140px;position:relative}.jar-fill{z-index:0;height:var(--jar-fill);opacity:.82;background:linear-gradient(#f9d861,#f4ae32);border-radius:4px 4px 18px 18px;max-height:55%;transition:height .18s;position:absolute;bottom:22%;left:32%;right:29%}.jar-fill-label{background:#ffeec7;border-radius:999px;margin-top:4px;padding:2px 8px;font-weight:700;display:inline-block}.reward-cards{gap:10px;display:grid}.photo-preview-card{border:2px dashed color-mix(in srgb, var(--color-primary) 40%, transparent);background:color-mix(in srgb, var(--color-primary) 6%, #fff);border-radius:16px;place-items:center;min-height:160px;margin:12px 0;display:grid;overflow:hidden}.photo-preview{object-fit:contain;width:100%;max-height:220px}.quiz-progress{background:color-mix(in srgb, var(--color-primary) 16%, #fff);border-radius:999px;height:8px;margin:8px 0 16px;overflow:hidden}.quiz-progress i{background:var(--color-primary);height:100%;display:block}.week-trend{background:color-mix(in srgb, var(--color-primary) 8%, #fff);border-radius:12px;justify-content:space-around;align-items:end;gap:16px;min-height:140px;padding:12px;display:flex}.week-trend-bar{place-items:center;gap:6px;width:64px;display:grid}.week-trend-bar i{background:linear-gradient(180deg, #42a5f5, var(--color-primary));border-radius:8px 8px 4px 4px;width:28px;min-height:8px;display:block}.parent-entry-link{color:var(--color-primary-dark);margin-top:16px;font-weight:600;display:inline-flex}.dashboard-hero .dashboard-top{background:#fffc;border-radius:12px;padding:8px 10px}
