:root{--green:#58cc02;--green-dark:#46a302;--green-bg:#d7ffb8;--blue:#1cb0f6;--red:#ff4b4b;--orange:#ff9600;--text:#3c3c3c;--muted:#777;--border:#e5e5e5;--bg:#f7f7f7;--radius:16px}*{box-sizing:border-box}body{color:var(--text);background:var(--bg);margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Nunito,sans-serif}h1{margin:.5rem 0;font-size:1.6rem}h2{margin:1.2rem 0 .5rem;font-size:1.1rem}.app-shell{max-width:560px;min-height:100vh;margin:0 auto}.topbar{border-bottom:2px solid var(--border);z-index:10;background:#fff;justify-content:space-between;align-items:center;padding:12px 16px;display:flex;position:sticky;top:0}.brand{color:var(--green-dark);font-size:1.1rem;font-weight:800;text-decoration:none}.topbar nav{gap:12px;display:flex}.topbar nav a{color:var(--muted);border-radius:10px;padding:6px 10px;font-weight:700;text-decoration:none}.topbar nav a.active{color:var(--green-dark);background:var(--green-bg)}.content{padding:16px}.page{flex-direction:column;gap:8px;display:flex}.center-screen{justify-content:center;align-items:center;min-height:100vh;padding:16px;display:flex}.login-card{border:2px solid var(--border);border-radius:var(--radius);text-align:center;background:#fff;flex-direction:column;gap:12px;width:100%;max-width:380px;padding:32px 24px;display:flex}.login-mascot{font-size:64px}.btn{cursor:pointer;text-align:center;color:var(--text);background:#fff;border:none;border-radius:14px;padding:12px 20px;font-size:.95rem;font-weight:800;text-decoration:none;transition:filter .1s,transform 50ms;display:inline-block}.btn:active{transform:translateY(2px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--green);color:#fff;box-shadow:0 4px 0 var(--green-dark)}.btn-primary:active{box-shadow:0 2px 0 var(--green-dark)}.btn-secondary{color:var(--blue);border:2px solid var(--border);box-shadow:0 4px 0 var(--border);background:#fff}.btn-ghost{color:var(--muted);background:0 0}.btn-ghost.danger{color:var(--red)}.btn-big{width:100%;padding:16px 24px;font-size:1.05rem}.btn-small{padding:8px 14px;font-size:.85rem}input,textarea{font:inherit;border:2px solid var(--border);background:#fff;border-radius:12px;width:100%;padding:12px}input:focus,textarea:focus{border-color:var(--blue);outline:none}input[type=number]{width:auto}input[type=checkbox]{width:22px;height:22px;accent-color:var(--green)}input[type=file]{border:none;padding:4px 0}label{flex-direction:column;gap:6px;font-size:.9rem;font-weight:700;display:flex}.label-text{margin-bottom:6px;font-size:.9rem;font-weight:700}.stack{flex-direction:column;gap:14px;display:flex}.row{align-items:center;gap:8px;display:flex}.row.wrap{flex-wrap:wrap}.row-between{justify-content:space-between;align-items:center;display:flex}.divider{color:var(--muted);margin:4px 0;font-size:.85rem}.muted{color:var(--muted)}.small{font-size:.82rem}.error{color:var(--red);font-weight:700}.challenge-card{background:linear-gradient(135deg, var(--green) 0%, #7fe030 100%);color:#fff;border-radius:var(--radius);box-shadow:0 5px 0 var(--green-dark);margin:8px 0 16px;padding:22px;text-decoration:none;display:block}.challenge-card.done{color:#6b5200;background:linear-gradient(135deg,#ffc800 0%,#ffde59 100%);box-shadow:0 5px #e5a600}.challenge-label{text-transform:uppercase;letter-spacing:.05em;opacity:.9;font-size:.85rem;font-weight:800}.challenge-name{margin:6px 0;font-size:1.5rem;font-weight:800}.challenge-sub{opacity:.9;font-size:.9rem}.streak{color:var(--orange);font-size:1.2rem;font-weight:800}.chore-list{flex-direction:column;gap:10px;display:flex}.chore-card{border:2px solid var(--border);border-radius:var(--radius);color:inherit;background:#fff;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;text-decoration:none;display:flex}.chore-card:hover{border-color:var(--green)}.chore-name{font-weight:800}.chore-meta{flex-wrap:wrap;align-items:center;gap:8px;margin-top:4px;display:flex}.chore-thumb{object-fit:cover;border-radius:10px;width:52px;height:52px}.badge{text-transform:uppercase;border-radius:999px;padding:3px 8px;font-size:.72rem;font-weight:800}.badge-overdue{color:var(--red);background:#ffe3e3}.badge-due{color:var(--orange);background:#fff1d6}.badge-ok{background:var(--green-bg);color:var(--green-dark)}.checklist{flex-direction:column;gap:8px;margin-bottom:12px;display:flex}.check-item{border:2px solid var(--border);cursor:pointer;background:#fff;border-radius:12px;flex-direction:row;align-items:center;gap:12px;padding:12px 14px;font-weight:600;display:flex}.check-item.checked{background:var(--green-bg);border-color:var(--green);color:var(--green-dark);text-decoration:line-through}.chip{border:2px solid var(--border);cursor:pointer;background:#fff;border-radius:999px;padding:8px 14px;font-size:.85rem;font-weight:700}.chip-on{background:var(--green-bg);border-color:var(--green);color:var(--green-dark)}.photo-preview,.photo-hero{border-radius:var(--radius);object-fit:cover;max-width:100%;max-height:240px}.avatar{border-radius:50%;width:40px;height:40px}.invite-box{border:2px dashed var(--blue);border-radius:var(--radius);background:#fff;margin:8px 0;padding:16px}.invite-code{letter-spacing:.15em;color:var(--blue);font-size:1.4rem;font-weight:800}.celebrate{text-align:center}.celebrate-emoji{font-size:80px;animation:.5s pop}@keyframes pop{0%{transform:scale(0)}70%{transform:scale(1.3)}to{transform:scale(1)}}.spinner{border:4px solid var(--border);border-top-color:var(--green);border-radius:50%;width:40px;height:40px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.reminder-box{border:2px solid var(--border);border-radius:var(--radius);background:#fff;flex-direction:column;gap:8px;padding:12px 14px;display:flex}.check-row{align-items:center;gap:8px}.check-row input[type=checkbox]{width:20px;height:20px;accent-color:var(--green);margin:0}.check-row span{font-weight:600}.composer{border:2px solid var(--border);border-radius:var(--radius);background:#fff;margin:4px 0 8px;padding:8px 10px;transition:border-color .15s,box-shadow .15s}.composer.active{border-color:var(--green);box-shadow:0 4px 0 var(--border)}.composer-main{align-items:center;gap:8px;display:flex}.composer-plus{color:var(--muted);font-size:1.3rem;font-weight:800;line-height:1}.composer-main input{border:none;padding:8px 0;font-weight:600}.composer-main input:focus{border:none}.composer-opts{border-top:1px dashed var(--border);flex-direction:column;gap:6px;margin-top:6px;padding:8px 0 2px 26px;display:flex}.tabs{gap:6px;margin:4px 0 8px;display:flex}.tab{font:inherit;color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:999px;padding:6px 12px;font-size:.85rem;font-weight:800}.tab.active{background:var(--green-bg);color:var(--green-dark)}.task-group{margin-bottom:14px}.task-group-head{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:6px 4px;font-size:.75rem;font-weight:800}.task-group-head.toggle{width:100%;font:inherit;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);cursor:pointer;background:0 0;border:none;justify-content:space-between;align-items:center;font-size:.75rem;font-weight:800;display:flex}.link-danger{color:var(--red);cursor:pointer;font-weight:800}.task-list{border:2px solid var(--border);border-radius:var(--radius);background:#fff;overflow:hidden}.task-item+.task-item{border-top:1px solid var(--border)}.swipe-row{position:relative;overflow:hidden}.swipe-bg{color:#fff;align-items:center;gap:8px;padding:0 18px;font-size:.9rem;font-weight:800;display:flex;position:absolute;inset:0}.swipe-bg.left-align{justify-content:flex-start}.swipe-bg.right-align{justify-content:flex-end}.swipe-bg .swipe-icon{font-size:1.1rem}.swipe-bg .swipe-label{opacity:.55;transition:opacity .15s}.swipe-bg.armed .swipe-label{opacity:1}.swipe-fg{background:#fff;position:relative}.task-row{background:#fff;align-items:center;gap:10px;padding:12px;display:flex}.task-row.open{background:#fafffa}.task-check{border:2px solid var(--border);color:#fff;cursor:pointer;background:#fff;border-radius:50%;flex:none;width:26px;height:26px;font-size:.85rem;font-weight:900;line-height:1;transition:background .15s,border-color .15s,transform .1s}.task-check:active{transform:scale(.9)}.task-check.on{background:var(--green);border-color:var(--green)}.task-main{text-align:left;font:inherit;cursor:pointer;background:0 0;border:none;flex-direction:column;flex:auto;align-items:flex-start;gap:3px;min-width:0;padding:0;display:flex}.task-title{font-weight:700}.task-row.done .task-title{color:var(--muted);font-weight:600;text-decoration:line-through}.task-meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:8px;font-size:.76rem;display:flex}.task-due{color:var(--blue);font-weight:800}.task-due.late{color:var(--red)}.task-who{background:var(--bg);border-radius:999px;padding:1px 8px;font-weight:700}.task-star{color:var(--border);cursor:pointer;background:0 0;border:none;flex:none;padding:4px;font-size:1.1rem}.task-star.on{color:var(--orange)}.task-detail{background:#fafffa;flex-direction:column;gap:10px;padding:4px 12px 14px 48px;animation:.15s ease-out slide-down;display:flex}.task-detail textarea{border-radius:10px}.task-detail-row{flex-direction:column;gap:4px;display:flex}@keyframes slide-down{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.empty-inbox{text-align:center;padding:28px 16px}.empty-emoji{font-size:44px}.empty-title{margin-top:4px;font-weight:800}.undo-bar{z-index:50;color:#fff;background:#202020;border-radius:12px;align-items:center;gap:16px;max-width:calc(100% - 32px);padding:12px 16px;font-size:.88rem;font-weight:600;animation:.18s ease-out undo-in;display:flex;position:fixed;bottom:20px;left:50%;transform:translate(-50%);box-shadow:0 6px 20px #00000040}.undo-btn{color:var(--green);font:inherit;text-transform:uppercase;cursor:pointer;background:0 0;border:none;font-weight:800}@keyframes undo-in{0%{opacity:0;transform:translate(-50%,12px)}to{opacity:1;transform:translate(-50%)}}.tasks-strip{border:2px solid var(--border);border-radius:var(--radius);color:inherit;background:#fff;justify-content:space-between;align-items:center;gap:12px;margin-bottom:4px;padding:14px 16px;text-decoration:none;display:flex}.tasks-strip:hover{border-color:var(--blue)}.tasks-strip-title{font-weight:800}.tasks-strip-arrow{color:var(--muted);font-size:1.4rem;font-weight:800}.task-group-head .head-btn,.task-group-head .link-danger{font:inherit;cursor:pointer;color:inherit;background:0 0;border:none;padding:0}.task-group-head .link-danger{color:var(--red);font-weight:800}.pass-pill{color:var(--blue);background:#e3f4fd;border-radius:999px;padding:4px 10px;font-size:.9rem;font-weight:800}.pass-pill.spent{color:var(--muted);background:var(--border)}.pass-trigger{color:var(--blue);align-self:center;font-size:.9rem;font-weight:700}.challenge-card.passed{color:#fff;background:linear-gradient(135deg,#1cb0f6 0%,#6fd0ff 100%);box-shadow:0 5px #1288bd}.debt-banner{border:2px solid var(--orange);border-radius:var(--radius);background:#fff1d6;padding:12px 14px;font-size:.9rem;font-weight:600}.debt-banner.overdue{border-color:var(--red);background:#ffe3e3}.makeup-list{flex-direction:column;gap:10px;display:flex}.makeup-card{border-left:6px solid var(--orange)}.sheet-backdrop{z-index:50;background:#0006;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.sheet{background:var(--bg);border-radius:var(--radius) var(--radius) 0 0;width:100%;max-width:560px;padding:10px 16px calc(20px + env(safe-area-inset-bottom));flex-direction:column;gap:10px;max-height:88vh;animation:.22s ease-out sheet-up;display:flex;overflow-y:auto}@keyframes sheet-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}.sheet-handle{background:var(--border);border-radius:999px;align-self:center;width:44px;height:5px;margin-bottom:4px}.sheet-title{margin:0;font-size:1.25rem}.pass-options{flex-direction:column;gap:8px;display:flex}.pass-option{text-align:left;border:2px solid var(--border);font:inherit;color:inherit;cursor:pointer;background:#fff;border-radius:14px;align-items:flex-start;gap:12px;padding:14px;display:flex}.pass-option.on{border-color:var(--blue);background:#f2fbff}.pass-option:disabled{opacity:.5;cursor:not-allowed}.pass-option>span:last-child{flex-direction:column;gap:2px;display:flex}.pass-emoji{font-size:1.4rem;line-height:1.2}.pass-detail{border:2px solid var(--border);background:#fff;border-radius:14px;flex-direction:column;gap:8px;padding:12px 14px;display:flex}.swap-list{flex-direction:column;gap:8px;display:flex}.swap-item{border:2px solid var(--border);font:inherit;color:inherit;cursor:pointer;text-align:left;background:#fff;border-radius:12px;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;font-weight:700;display:flex}.swap-item.on{border-color:var(--green);background:var(--green-bg);color:var(--green-dark)}.pass-owed{background:#fff1d6;border-radius:12px;padding:10px 12px;font-size:.85rem;font-weight:600}
