:root{
  --bg:#fbfcf8;
  --card:#ffffff;
  --ink:#1f2922;
  --muted:#7b847e;
  --line:#e8ece6;
  --green:#4e7359;
  --green-2:#7f9c84;
  --green-soft:#eef3e9;
  --sage:#f2f4e8;
  --blue:#4f72b8;
  --blue-soft:#edf2fb;
  --warm:#f5eee7;
  --danger:#b45c5c;
  --danger-soft:#fbefef;
  --shadow:0 10px 30px rgba(46,61,49,.06);
  --radius:24px;
}
*{box-sizing:border-box}
html{background:var(--bg);-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","PingFang SC","Microsoft YaHei",Segoe UI,sans-serif;min-height:100vh}
button,input,select,textarea{font:inherit}
button{cursor:pointer}
.hidden{display:none!important}
.app-shell{width:min(100%,860px);margin:0 auto;min-height:100vh;padding-bottom:104px}
.topbar{height:72px;padding:calc(10px + env(safe-area-inset-top)) 18px 10px;display:grid;grid-template-columns:44px 1fr auto;align-items:center;gap:10px;position:sticky;top:0;z-index:25;background:rgba(251,252,248,.9);backdrop-filter:blur(18px);border-bottom:1px solid rgba(232,236,230,.8)}
.icon-btn,.round-btn{border:1px solid var(--line);background:#fff;color:var(--ink);display:grid;place-items:center}
.menu-btn{width:40px;height:40px;border-radius:50%;padding:0;gap:4px}
.menu-btn span{width:16px;height:1.5px;background:var(--ink);display:block;border-radius:2px}
.topbar-title-wrap{min-width:0}.eyebrow,.section-kicker{font-size:10px;letter-spacing:.18em;color:var(--muted);text-transform:uppercase;font-weight:700}.topbar-title{font-size:16px;font-weight:700;margin-top:2px}
.identity-pill{border:1px solid var(--line);background:#fff;border-radius:999px;padding:9px 12px;font-size:12px;color:var(--ink);box-shadow:0 2px 8px rgba(32,42,34,.03)}
.main-content{padding:18px 18px 0}.view{display:none}.view.active{display:block;animation:fade .18s ease}@keyframes fade{from{opacity:.4;transform:translateY(3px)}to{opacity:1;transform:none}}
.notice{background:#fff8df;border:1px solid #efe2b2;border-radius:16px;padding:12px 14px;font-size:12px;line-height:1.7;color:#6a613f;margin-bottom:16px}
.hero-copy{padding:16px 4px 18px}.hero-date{font-size:12px;letter-spacing:.14em;color:var(--muted);font-weight:700;text-transform:uppercase}.hero-row{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.hero-copy h1,.page-intro h1{font-size:30px;line-height:1.16;margin:14px 0 8px;letter-spacing:-.02em}.hero-copy p,.page-intro p{margin:0;color:var(--muted);font-size:14px;line-height:1.7}.weekday-chip{border:1px solid var(--line);border-radius:999px;padding:10px 14px;background:#fff;font-size:12px;color:#5f695f;white-space:nowrap;margin-top:12px}
.focus-progress{background:var(--sage);border-radius:26px;padding:22px;box-shadow:var(--shadow);margin-bottom:26px}.focus-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px}.focus-head h2{font-size:34px;margin:8px 0 0;font-family:Georgia,"Times New Roman",serif;font-weight:500}.focus-remaining{font-size:13px;color:var(--green);font-weight:700;background:rgba(255,255,255,.6);padding:8px 11px;border-radius:999px}.progress-track{height:8px;background:rgba(78,115,89,.13);border-radius:999px;overflow:hidden;margin-top:18px}.progress-bar{height:100%;width:0;background:var(--green);border-radius:999px;transition:width .35s ease}
.section-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-end;margin:28px 2px 14px}.section-head.compact{margin-top:6px}.section-head h2,.archive-toolbar h2,.day-detail-head h2{font-size:20px;margin:0 0 4px}.section-head p{font-size:12px;color:var(--muted);margin:0}.text-btn{border:0;background:transparent;color:var(--green);font-size:12px;font-weight:700;padding:4px 0}
.duo-progress{display:grid;grid-template-columns:1fr 1fr;gap:12px}.duo-card{background:#fff;border:1px solid var(--line);border-radius:20px;padding:16px;box-shadow:0 6px 20px rgba(46,61,49,.035)}.duo-card.me{border-color:#cfdaca}.duo-card-top{display:flex;justify-content:space-between;gap:12px;align-items:center}.party-badge{font-size:11px;font-weight:700;padding:5px 9px;border-radius:999px;background:#f2f3f1;color:#5d665f}.duo-card.me .party-badge{background:var(--green-soft);color:var(--green)}.duo-number{font-family:Georgia,"Times New Roman",serif;font-size:26px}.duo-meta{font-size:12px;color:var(--muted);margin-top:8px}.mini-progress{height:5px;background:#eef0ed;border-radius:999px;overflow:hidden;margin-top:12px}.mini-progress i{display:block;height:100%;background:var(--green);border-radius:999px}
.today-task-list{display:grid;gap:12px}.task-card{border:1px solid var(--line);background:#fff;border-radius:22px;padding:16px;display:grid;grid-template-columns:50px 1fr auto;gap:14px;align-items:center;box-shadow:0 6px 20px rgba(46,61,49,.035)}.task-icon{width:50px;height:50px;border-radius:16px;display:grid;place-items:center;font-size:22px;background:var(--green-soft)}.task-card:nth-child(2n) .task-icon{background:var(--blue-soft)}.task-card:nth-child(3n) .task-icon{background:var(--warm)}.task-copy h3{font-size:17px;margin:0 0 5px}.task-copy p{font-size:12px;color:var(--muted);margin:0;line-height:1.55}.task-time{font-size:11px;color:var(--muted);display:block;margin-top:6px}.task-action{border:1px solid var(--line);background:#f8faf7;border-radius:14px;padding:10px 12px;font-size:12px;color:#415248;font-weight:700;white-space:nowrap}.task-action.primary{background:var(--green);color:#fff;border-color:var(--green)}.task-action.done{background:var(--green-soft);color:var(--green);border-color:#dce5d8}.task-action:disabled{opacity:.55;cursor:default}
.weekly-strip{display:flex;justify-content:space-between;gap:16px;align-items:center;background:#f3f6ef;border:1px solid #e5eadf;border-radius:22px;padding:18px;margin-top:16px}.weekly-strip h3{font-size:16px;margin:7px 0 4px}.weekly-strip p{font-size:12px;color:var(--muted);margin:0}.weekly-dots{display:flex;gap:5px;flex-wrap:wrap;justify-content:flex-end}.weekly-dot{width:23px;height:23px;border-radius:50%;display:grid;place-items:center;border:1px solid #d9e1d6;color:#899288;font-size:10px;background:#fff}.weekly-dot.done{background:var(--green);border-color:var(--green);color:#fff}
.recent-list{display:grid;gap:10px}.recent-item{display:grid;grid-template-columns:58px 1fr auto;gap:12px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:18px;padding:10px}.recent-thumb{width:58px;height:58px;border-radius:13px;object-fit:cover;background:#eff1ee}.recent-copy strong{display:block;font-size:13px;margin-bottom:4px}.recent-copy span{font-size:11px;color:var(--muted);line-height:1.45}.recent-party{font-size:10px;font-weight:700;color:var(--green);background:var(--green-soft);padding:5px 8px;border-radius:999px}
.calendar-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;padding:18px 2px 14px}.calendar-head h1{font-size:28px;margin:8px 0 0}.calendar-actions{display:flex;gap:7px}.round-btn{width:36px;height:36px;border-radius:50%;font-size:18px}.calendar-legend{display:flex;align-items:center;gap:14px;font-size:11px;color:var(--muted);margin:0 4px 10px;flex-wrap:wrap}.calendar-legend span{display:flex;align-items:center;gap:5px}.calendar-legend .dot{width:8px;height:8px;border-radius:50%;display:inline-block;background:var(--green)}.calendar-legend .dot.b{background:var(--blue)}.calendar-legend .legend-note{margin-left:auto}
.calendar-card{background:#fff;border:1px solid var(--line);border-radius:24px;padding:12px;box-shadow:var(--shadow)}.weekday-row,.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr)}.weekday-row span{text-align:center;font-size:10px;color:#98a098;padding:5px 0 10px}.calendar-day{min-height:66px;border:0;background:transparent;border-radius:14px;padding:7px 4px;display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--ink);position:relative}.calendar-day.muted{opacity:.28}.calendar-day.today{background:#f3f6ef}.calendar-day.selected{box-shadow:inset 0 0 0 1.5px var(--green);background:#f8faf6}.calendar-day .num{font-size:12px;font-weight:600}.day-dots{display:flex;gap:4px}.day-status{width:8px;height:8px;border-radius:50%;border:1.5px solid #b9c0ba}.day-status.a.done{background:var(--green);border-color:var(--green)}.day-status.b.done{background:var(--blue);border-color:var(--blue)}.day-status.a.overdue{border-color:#c98c8c}.day-status.b.overdue{border-color:#c98c8c}.day-count{font-size:8px;color:#9aa19a;line-height:1}.day-detail-head{display:flex;justify-content:space-between;align-items:flex-end;margin:26px 2px 12px}.primary-small,.secondary-small{border:0;border-radius:999px;padding:9px 13px;font-size:11px;font-weight:700}.primary-small{background:var(--green);color:#fff}.secondary-small{background:#f2f4f1;color:#516057}.day-party-toggle{display:grid;grid-template-columns:1fr 1fr;background:#eff2ed;padding:3px;border-radius:999px;margin-bottom:12px}.day-party-toggle button{border:0;background:transparent;border-radius:999px;padding:9px;color:#7b847e;font-size:12px;font-weight:700}.day-party-toggle button.active{background:#fff;color:var(--ink);box-shadow:0 2px 8px rgba(32,42,34,.06)}.day-detail-list{display:grid;gap:10px}.day-detail-item{background:#fff;border:1px solid var(--line);border-radius:18px;padding:14px;display:grid;grid-template-columns:1fr auto;gap:10px}.day-detail-item h3{font-size:14px;margin:0 0 6px}.day-detail-item p{font-size:11px;color:var(--muted);margin:0;line-height:1.5}.day-state{font-size:10px;padding:5px 8px;border-radius:999px;height:max-content;background:#f2f4f1;color:#7d847f}.day-state.done{background:var(--green-soft);color:var(--green)}.day-proof-strip{grid-column:1/-1;display:flex;gap:7px;overflow:auto;padding-top:2px}.day-proof-strip img{width:62px;height:62px;object-fit:cover;border-radius:12px;border:1px solid var(--line)}
.page-intro{padding:18px 4px 20px}.page-intro h1{font-size:27px}.folder-row{display:flex;gap:10px;overflow:auto;padding:2px 2px 8px;scrollbar-width:none}.folder-row::-webkit-scrollbar{display:none}.folder-card{min-width:150px;border:1px solid var(--line);background:#fff;border-radius:18px;padding:14px;text-align:left}.folder-card.active{border-color:#becdb9;background:#f7faf5}.folder-icon{width:34px;height:26px;background:#c9d7c3;border-radius:5px 5px 8px 8px;margin-bottom:12px;position:relative}.folder-icon:before{content:"";position:absolute;left:0;top:-5px;width:18px;height:8px;border-radius:4px 4px 0 0;background:#c9d7c3}.folder-card strong{font-size:13px;display:block;line-height:1.35}.folder-card span{font-size:10px;color:var(--muted);display:block;margin-top:5px}.archive-toolbar{display:flex;justify-content:space-between;align-items:flex-end;margin:24px 2px 12px}.proof-masonry{columns:2;column-gap:10px}.proof-card{break-inside:avoid;background:#fff;border:1px solid var(--line);border-radius:18px;overflow:hidden;margin-bottom:10px}.proof-card img{width:100%;display:block;aspect-ratio:1/1;object-fit:cover;background:#eff1ee}.proof-card-body{padding:11px}.proof-card-body strong{font-size:12px;display:block;line-height:1.4}.proof-card-body p{font-size:10px;color:var(--muted);margin:5px 0 0;line-height:1.55}.proof-note{font-size:10px;color:#4f5b52;background:#f6f8f5;border-radius:9px;padding:7px 8px;margin-top:7px;line-height:1.45}
.plan-groups{display:grid;gap:14px}.plan-card{background:#fff;border:1px solid var(--line);border-radius:22px;padding:18px}.plan-card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.plan-card h2{font-size:18px;margin:0}.plan-list{display:grid;gap:10px}.plan-item{display:grid;grid-template-columns:42px 1fr;gap:12px;align-items:flex-start;padding:10px 0;border-top:1px solid #f0f2ef}.plan-item:first-child{border-top:0}.plan-icon{width:42px;height:42px;border-radius:13px;background:var(--green-soft);display:grid;place-items:center}.plan-item strong{font-size:13px}.plan-item p{font-size:11px;color:var(--muted);line-height:1.55;margin:4px 0 0}.schedule-pills{display:flex;gap:5px;flex-wrap:wrap;margin-top:7px}.schedule-pill{font-size:9px;padding:4px 6px;border-radius:7px;background:#f2f4f1;color:#697169}
.profile-card{background:#fff;border:1px solid var(--line);border-radius:24px;padding:20px;display:grid;grid-template-columns:62px 1fr auto;gap:14px;align-items:center;margin-top:14px}.profile-avatar{width:62px;height:62px;border-radius:20px;background:var(--green-soft);color:var(--green);display:grid;place-items:center;font-size:24px;font-weight:700}.profile-card h2{font-size:18px;margin:6px 0 4px}.profile-card p{font-size:11px;color:var(--muted);margin:0;line-height:1.5}.rules-card{background:var(--sage);border-radius:24px;padding:22px;margin-top:14px}.rules-card h2{font-size:20px;line-height:1.35;margin:9px 0}.rules-card p{font-size:12px;color:#697269;margin:0;line-height:1.7}.stats-card{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}.stat-box{background:#fff;border:1px solid var(--line);border-radius:18px;padding:15px}.stat-box strong{font-family:Georgia,"Times New Roman",serif;font-size:25px;font-weight:500;display:block}.stat-box span{font-size:10px;color:var(--muted)}
.fab{position:fixed;right:max(20px,calc((100vw - 860px)/2 + 20px));bottom:86px;width:56px;height:56px;border-radius:50%;border:0;background:var(--green);color:#fff;font-size:28px;box-shadow:0 12px 28px rgba(48,80,58,.24);z-index:26}.bottom-nav{position:fixed;left:50%;bottom:0;transform:translateX(-50%);width:min(100%,860px);height:76px;padding:8px 20px calc(8px + env(safe-area-inset-bottom));display:grid;grid-template-columns:repeat(4,1fr);background:rgba(251,252,248,.96);backdrop-filter:blur(18px);border-top:1px solid var(--line);z-index:24}.nav-item{border:0;background:transparent;color:#8a928b;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;font-size:10px}.nav-item.active{color:var(--green)}.nav-symbol{font-size:21px;line-height:1}.nav-item.active .nav-symbol{transform:translateY(-1px)}
.drawer-backdrop{position:fixed;inset:0;background:rgba(26,31,27,.22);z-index:60;backdrop-filter:blur(2px)}.drawer{position:fixed;left:0;top:0;bottom:0;width:min(84vw,360px);background:#fff;z-index:61;padding:calc(18px + env(safe-area-inset-top)) 18px 20px;transform:translateX(-104%);transition:transform .22s ease;box-shadow:18px 0 40px rgba(34,43,36,.13);overflow:auto}.drawer.open{transform:none}.drawer-head{display:flex;justify-content:space-between;gap:14px;align-items:flex-start}.drawer-head h2{font-size:21px;margin:6px 0 0}.drawer-heatmap-card{background:#f6f7f4;border-radius:18px;padding:14px;margin:18px 0}.drawer-heatmap-top{display:flex;justify-content:space-between;font-size:11px;color:var(--muted)}.drawer-heatmap-top strong{color:var(--ink);font-size:16px}.mini-heatmap{display:grid;grid-template-columns:repeat(14,1fr);gap:3px;margin-top:12px}.heat-cell{aspect-ratio:1;border-radius:3px;background:#e9ece8}.heat-cell.l1{background:#dbe6d8}.heat-cell.l2{background:#aebfa9}.heat-cell.l3{background:#789579}.heat-cell.l4{background:#4e7359}.drawer-menu{display:grid;gap:5px}.drawer-menu button{border:0;background:transparent;border-radius:12px;padding:12px 10px;text-align:left;color:var(--ink);font-size:13px;display:flex;gap:12px}.drawer-menu button:hover{background:#f6f8f5}.drawer-divider{height:1px;background:var(--line);margin:16px 0}.drawer-label{font-size:10px;letter-spacing:.12em;color:#9aa19a;margin-bottom:9px}.drawer-categories{display:grid;gap:7px}.drawer-category{display:flex;justify-content:space-between;gap:10px;font-size:12px;padding:7px 4px;color:#536057}.drawer-category span:last-child{color:#a0a6a1}
.sheet-dialog,.join-dialog{border:0;padding:0;background:transparent;max-width:none;max-height:none}.sheet-dialog::backdrop,.join-dialog::backdrop{background:rgba(25,31,26,.34);backdrop-filter:blur(3px)}.sheet-dialog{width:min(100%,860px);height:100%;margin:0 auto;inset:auto 0 0}.sheet-card{position:absolute;left:0;right:0;bottom:0;background:#fff;border-radius:28px 28px 0 0;padding:10px 18px calc(20px + env(safe-area-inset-bottom));max-height:92vh;overflow:auto}.sheet-handle{width:42px;height:4px;border-radius:999px;background:#d9ddda;margin:2px auto 14px}.sheet-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:14px}.sheet-head h2{font-size:22px;margin:7px 0 0}.field{display:block;margin-top:13px}.field>span{display:block;font-size:11px;color:#566258;font-weight:700;margin:0 0 7px}.field input,.field select,.field textarea{width:100%;border:1px solid var(--line);border-radius:14px;background:#fafbf9;color:var(--ink);padding:13px 14px;outline:none}.field textarea{min-height:78px;resize:vertical}.field input:focus,.field select:focus,.field textarea:focus{border-color:#bacab6;box-shadow:0 0 0 3px rgba(78,115,89,.08)}.field small{display:block;color:#9aa19a;font-size:9px;margin-top:5px}.photo-picker{display:block;border:1.5px dashed #cfd6cf;border-radius:18px;overflow:hidden;margin-top:15px;background:#fafbf9}.photo-picker input{display:none}.photo-empty{min-height:132px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;color:#5e695f}.photo-empty strong{font-size:12px}.photo-empty span{font-size:9px;color:#9ba29c}.camera-plus{width:38px;height:38px;border-radius:50%;background:var(--green-soft);display:grid;place-items:center;color:var(--green);font-size:20px;margin-bottom:2px}.photo-preview{width:100%;max-height:300px;object-fit:cover;display:block}.upload-meta{display:flex;justify-content:space-between;gap:10px;color:#8c958e;font-size:9px;margin:9px 2px 0}.primary-btn{width:100%;border:0;border-radius:16px;background:var(--green);color:#fff;font-weight:700;padding:14px;margin-top:16px}.primary-btn:disabled{opacity:.6}.join-dialog{width:min(92vw,380px);margin:auto}.join-card{background:#fff;border-radius:28px;padding:24px}.join-mark{width:44px;height:44px;border-radius:14px;background:var(--green-soft);display:grid;place-items:center;color:var(--green);font-weight:800;margin-bottom:14px}.join-card h2{font-size:23px;margin:7px 0}.join-card>p{font-size:12px;color:var(--muted);line-height:1.7}.demo-role{display:grid;grid-template-columns:1fr 1fr;background:#eff2ed;padding:3px;border-radius:999px;margin-top:13px}.demo-role button{border:0;background:transparent;border-radius:999px;padding:10px}.demo-role button.active{background:#fff;box-shadow:0 2px 8px rgba(32,42,34,.06)}.form-error{font-size:11px;color:var(--danger);background:var(--danger-soft);padding:9px 10px;border-radius:10px;margin-top:10px}
.toast{position:fixed;left:50%;bottom:94px;transform:translate(-50%,12px);max-width:calc(100vw - 36px);background:#202822;color:#fff;border-radius:999px;padding:10px 14px;font-size:11px;opacity:0;pointer-events:none;transition:.2s;z-index:100;text-align:center}.toast.show{opacity:1;transform:translate(-50%,0)}.empty-state{background:#fff;border:1px dashed #dfe4df;border-radius:18px;padding:22px;text-align:center;color:#9aa19a;font-size:12px}
@media (max-width:520px){.main-content{padding-left:14px;padding-right:14px}.hero-copy h1{font-size:28px}.duo-progress{grid-template-columns:1fr 1fr}.task-card{grid-template-columns:48px 1fr auto;padding:14px}.task-icon{width:48px;height:48px}.weekly-strip{align-items:flex-start;flex-direction:column}.weekly-dots{justify-content:flex-start}.profile-card{grid-template-columns:56px 1fr}.profile-card .secondary-small{grid-column:1/-1;width:100%}.calendar-day{min-height:61px}.calendar-card{padding:9px}.proof-masonry{columns:2}.fab{right:18px}}
@media (min-width:700px){.main-content{padding-left:28px;padding-right:28px}.today-task-list{grid-template-columns:1fr 1fr}.recent-list{grid-template-columns:1fr 1fr}.proof-masonry{columns:3}.plan-groups{grid-template-columns:1fr 1fr}.calendar-day{min-height:84px}}
