:root{--bg:#f8f8f2;--surface:#fffefa;--ink:#303c33;--muted:#737a6f;--green:#537753;--green-dark:#3e603f;--soft:#eff3e8;--border:#e7e9df;--yellow:#f7efd7;--danger:#a34437;--radius:18px;--motion:180ms}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.6 'Segoe UI','Microsoft YaHei',sans-serif}button,input,textarea{font:inherit}button{cursor:pointer;color:inherit}button,a,input,textarea{ -webkit-tap-highlight-color:transparent}button{transition:background var(--motion),color var(--motion),box-shadow var(--motion)}button:focus-visible,a:focus-visible{outline:3px solid #9cae7e;outline-offset:3px}button:hover{background:#edf0e5}button:active{filter:brightness(.97)}svg{width:20px;height:20px;vertical-align:middle}button svg{pointer-events:none}input,textarea{background:var(--surface);border:1px solid #ced4c5;border-radius:8px;padding:9px 11px;width:100%;color:var(--ink);outline:none}input:focus,textarea:focus{border-color:var(--green);box-shadow:0 0 0 3px #54785316}textarea{resize:vertical;min-height:74px;line-height:1.7}button:disabled{cursor:not-allowed;opacity:.5}button[hidden]{display:none}.topbar{height:88px;margin:0 48px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:28px}.brand{display:flex;align-items:center;gap:10px;color:var(--ink);text-decoration:none;font-size:25px;font-weight:650;letter-spacing:-1px}.brand-icon{width:36px;height:36px;background:var(--green);color:#f4f5dc;border-radius:12px;display:grid;place-items:center}.brand-icon svg{width:24px;height:24px}.brand-dot{color:var(--green)}.top-caption{font-size:12px;color:var(--muted);border-left:1px solid var(--border);padding-left:25px}.local-badge{margin-left:auto;font-size:12px;color:#5c6c53;display:flex;align-items:center;gap:8px}.local-badge>span{width:6px;height:6px;border-radius:50%;background:#79906b}main{max-width:1600px;margin:auto;padding:0 48px}.intro{display:flex;align-items:center;justify-content:space-between;padding:39px 0 32px}.eyebrow{font-size:10px;font-weight:650;letter-spacing:2.4px;color:#7c896e}h1{font-weight:600;font-size:30px;letter-spacing:1px;margin:9px 0 8px;line-height:1.5}.heading-dot{color:#91a37a}.intro p{margin:0;color:var(--muted);font-size:13px}.intro-art{display:flex;align-items:center;margin-right:10px;gap:4px}.intro-art svg{width:180px;height:100px}.intro-art span{font-family:'STKaiti','KaiTi',serif;color:#858672;font-size:16px;letter-spacing:2px}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:24px;align-items:start}.calendar-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:0 4px 24px #35402a03}.calendar-toolbar{height:90px;display:flex;align-items:center;justify-content:space-between;padding:0 25px}.month-title{display:flex;align-items:baseline;gap:12px}h2{font-size:21px;font-weight:600;margin:0}.month-title>span{font-size:11px;color:var(--muted);letter-spacing:1px}.month-controls{display:flex;align-items:center;gap:5px}.icon-button{display:inline-grid;place-items:center;width:32px;height:34px;border:0;background:transparent;border-radius:7px}.icon-button svg{width:17px;height:17px}.today-button{background:transparent;border:1px solid var(--border);border-radius:7px;padding:6px 12px;font-size:12px;margin:0 4px}.weekdays{display:grid;grid-template-columns:repeat(7,1fr);padding:0 12px;background:#fafbf6;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}.weekdays span{text-align:center;padding:11px 0;font-size:11px;color:var(--muted)}.weekdays span:nth-last-child(-n+2){color:#99a08b}.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));padding:8px 12px 12px}.day{height:124px;min-width:0;border:0;border-right:1px solid #f0f0e8;border-bottom:1px solid #eeefe6;border-radius:0;background:transparent;text-align:left;padding:8px 7px;position:relative;display:flex;flex-direction:column;gap:2px;outline-offset:-3px!important}.day:nth-child(7n){border-right:0}.day:hover{background:#f5f6ee;border-radius:8px}.day.outside{background:#fcfcf8;color:#a4a99c}.day.selected{background:var(--soft);border:1.5px solid #8ca37a;border-radius:9px;z-index:1}.day-top{display:flex;align-items:center;justify-content:space-between;height:29px;margin-bottom:3px}.day-number{display:inline-grid;place-items:center;font-size:13px;width:25px;height:25px;border-radius:50%;font-weight:500}.is-today .day-number{background:var(--green);color:white}.today-tag{font-size:9px;color:var(--green);margin-right:auto;margin-left:3px}.win-icon{color:#718c47;display:flex}.win-icon svg{width:17px;height:17px}.mini-task{display:flex;gap:5px;align-items:center;font-size:11px;line-height:18px;min-width:0;color:#515b50}.mini-task span:last-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mini-check{width:10px;height:10px;border:1px solid #a9b49b;border-radius:3px;flex:none;line-height:9px;font-size:9px;text-align:center}.mini-task.done{color:#78876b}.mini-task.done .mini-check{background:#94a480;border-color:#94a480;color:white}.more{font-size:10px;color:#6b775f;margin:1px 0 0 15px}.calendar-footer{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:18px 23px;border-top:1px solid var(--border);font-size:10px;color:var(--muted)}.legend{display:flex;gap:17px}.legend>span{display:flex;align-items:center;gap:5px}.legend i{display:inline-block;width:9px;height:9px;border-radius:50%}.legend-today{background:var(--green)}.legend-selected{background:var(--soft);border:1px solid #8ca37a}.legend .legend-win{font-style:normal;color:#718c47;font-size:17px;width:13px;height:auto;line-height:1}.detail-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:24px 23px 0;min-height:590px;display:flex;flex-direction:column;position:sticky;top:20px}.detail-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:3px}.detail-header h2{font-size:22px}.date-tag{border-radius:5px;background:var(--soft);color:var(--green);font-size:10px;padding:3px 8px}.date-subtitle{font-size:12px;color:var(--muted)}.progress-card{background:#f2f4e9;border:1px solid #e8eddc;border-radius:12px;margin:21px 0 24px;padding:16px}.progress-head{display:flex;align-items:center;justify-content:space-between}.progress-head strong{font-size:13px;font-weight:500}.progress-head span{font-size:12px;color:#617449}.progress-head b{font-size:20px;font-weight:600;color:var(--green)}.progress-track{display:flex;gap:6px;margin:13px 0 9px}.progress-track i{height:5px;flex:1;background:#dfe5d3;border-radius:6px}.progress-track i.filled{background:#8a9f6a}.progress-card p{font-size:11px;color:#788164;margin:0}.progress-card.achieved{background:var(--yellow);border-color:#eee2bd}.progress-card.celebrate{animation:celebrate 650ms ease}.task-section-label{display:flex;justify-content:space-between;font-size:12px;color:#626e5d;margin-bottom:13px}.task-section-label span:last-child{font-size:11px;color:var(--muted)}.task{border:1px solid var(--border);border-radius:10px;padding:13px 12px;margin-bottom:10px;background:#fffefa}.task.completed{background:#f8f9f2}.task-main{display:flex;align-items:flex-start;gap:10px}.check-button{flex:none;width:19px;height:19px;border:1.5px solid #b4bda8;border-radius:6px;background:transparent;padding:0;margin-top:2px;display:grid;place-items:center}.completed .check-button{background:#8fa47c;border-color:#8fa47c;color:white;animation:check-pop 220ms ease}.check-button svg{width:13px;height:13px}.task-copy{min-width:0;flex:1}.task-title{line-height:1.7;font-size:13px;overflow-wrap:anywhere}.completed .task-title{color:#7d8575;text-decoration:line-through;text-decoration-color:#b9c0ae}.task-note{font-size:11px;color:#7d8376;line-height:1.7;margin-top:5px;overflow-wrap:anywhere}.edit-button{background:transparent;border:0;color:#89917f;padding:1px;width:24px;height:25px;border-radius:5px;flex:none}.edit-button svg{width:14px;height:14px}.add-button{width:100%;display:flex;justify-content:center;align-items:center;gap:7px;padding:10px;border:1px dashed #b9c7a8;background:#f6f8f0;border-radius:9px;color:var(--green);font-size:12px;margin-top:15px}.add-button svg{width:15px;height:15px}.done-entry{display:block;border:0;background:transparent;color:#7b826e;font-size:11px;margin:9px auto 22px;padding:7px}.done-entry:hover{border-radius:6px}.panel-foot{margin-top:auto;min-height:52px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:center;gap:8px;font-size:10px;color:#859078}.panel-foot button{border:0;background:transparent;color:var(--danger);text-decoration:underline;font-size:11px}.panel-foot .error{color:var(--danger)}.page-footer{display:flex;justify-content:space-between;font-size:10px;color:#8b9182;padding:22px 3px 28px}.page-footer svg{width:12px;height:12px;margin-right:5px}.empty{text-align:center;padding:24px 8px 22px;color:var(--muted)}.empty svg{height:38px;width:38px;color:#9bac86;margin-bottom:8px}.empty strong{font-size:13px;display:block;font-weight:500;color:#65705c}.empty p{font-size:11px}.editor{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}label.field{display:block;font-size:11px;color:#66725e;margin-bottom:11px}label.field input,label.field textarea{display:block;margin-top:5px;font-size:12px}.editor-actions{display:flex;gap:5px;align-items:center;flex-wrap:wrap}.small-button{font-size:11px;border:1px solid var(--border);border-radius:6px;background:transparent;padding:5px 8px}.small-button.danger{color:var(--danger);margin-left:auto}.primary{background:var(--green);color:white;border:1px solid var(--green);border-radius:7px;padding:7px 14px;font-size:12px}.primary:hover{background:var(--green-dark)}.new-form{border:1px solid #c3d0b8;padding:14px;background:#f9faf4;border-radius:11px;margin:15px 0}.new-form h3{font-size:13px;margin:0 0 12px;font-weight:600}.check-label{display:flex;align-items:center;gap:7px;font-size:12px;margin-bottom:13px}.check-label input{width:15px;accent-color:var(--green)}.form-actions{display:flex;gap:9px;justify-content:flex-end}.form-error{font-size:11px;color:var(--danger);margin:5px 0 8px}.move-row{margin-top:12px}.move-row label{font-size:11px}.move-controls{display:flex;gap:6px;margin-top:5px}.move-controls input{min-width:0;font-size:12px}.move-controls button{flex:none}#toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);border-radius:12px;padding:12px 20px;background:#374a35;color:#fff;font-size:13px;box-shadow:0 8px 35px #25351f20;z-index:20;display:none;max-width:90vw}#toast.visible{display:flex;gap:18px;align-items:center;animation:toast-in 180ms ease}#toast button{color:#fff;background:transparent;border:0;text-decoration:underline;font-size:12px}@keyframes check-pop{50%{transform:scale(1.18)}}@keyframes celebrate{50%{transform:scale(1.025);box-shadow:0 0 0 5px #efddaa40}}@keyframes toast-in{from{opacity:0;translate:0 6px}to{opacity:1;translate:0 0}}@media(min-width:1500px){.day{height:137px}.workspace{grid-template-columns:minmax(0,1fr) 360px}.detail-panel{min-height:640px}}@media(max-width:1200px){main{padding:0 28px}.topbar{margin:0 28px}.workspace{gap:16px;grid-template-columns:minmax(0,1fr) 310px}.detail-panel{padding:21px 18px 0}.intro-art span{display:none}.calendar-toolbar{padding:0 17px}.month-title>span{display:none}.day{padding:7px 4px}.calendar-footer>span{display:none}.mini-task{font-size:10px;gap:3px}.today-tag{display:none}}@media(max-width:850px){.workspace{grid-template-columns:1fr}.detail-panel{position:static;min-height:0}.intro-art{display:none}.top-caption{display:none}.day{height:115px}.intro{padding:26px 0}.detail-panel{padding-top:24px}.panel-foot{margin-top:12px}.page-footer{gap:20px}h1{font-size:25px}}@media(max-width:500px){main{padding:0 12px}.topbar{height:70px;margin:0 16px}.brand{font-size:22px}.local-badge{font-size:10px}.calendar-toolbar{height:75px;padding:0 12px}.month-title h2{font-size:18px}.calendar-grid{padding:6px}.weekdays{padding:0 6px}.day{height:108px;padding:6px 3px}.mini-task{font-size:9px;gap:2px}.mini-check{width:7px;height:7px;line-height:6px;font-size:7px}.more{font-size:9px;margin-left:0}.day-number{font-size:12px;width:22px;height:22px}.win-icon svg{width:13px;height:13px}.intro p{font-size:12px}.calendar-footer{padding:14px}.page-footer{font-size:9px;flex-wrap:wrap}.today-button{padding:6px}.month-controls{gap:0}}@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

/* Keep the calendar and an independently scrollable detail pane together on laptops. */
@media(min-width:851px){
 .detail-panel{max-height:calc(100dvh - 40px);overflow:hidden}
 #detail{overflow-y:auto;scrollbar-width:thin;scrollbar-color:#cad3be transparent;padding-bottom:2px}
 .panel-foot{flex-shrink:0}
 .mini-task{font-size:12px}
 .task-title{font-size:14px}
 .task-note{font-size:12px;color:#69745f}
 .completed .task-title{color:#68765d}
 .check-button{position:relative}
 .check-button:before{content:'';position:absolute;inset:-4px}
}
@media(min-width:851px) and (max-height:950px){
 .topbar{height:72px}
 .intro{padding:24px 0 23px}
 .intro-art svg{height:82px}
 .calendar-toolbar{height:74px}
 .day{height:112px}
 .calendar-footer{padding-top:13px;padding-bottom:13px}
 .detail-panel{padding-top:20px;min-height:0;max-height:calc(100dvh - 235px)}
 .progress-card{margin:17px 0 19px}
 .panel-foot{min-height:42px}
}
@media(min-width:851px) and (max-width:1200px){.mini-task{font-size:11px}}
@media(min-width:851px) and (max-height:950px){
 .day{padding-top:6px;padding-bottom:6px;gap:1px}
 .day-top{height:25px;flex-shrink:0;margin-bottom:2px}
 .mini-task{line-height:17px;flex-shrink:0}
 .more{line-height:14px;flex-shrink:0;margin-top:0}
}

[hidden]{display:none!important}
.login-shell{min-height:calc(100vh - 100px);display:grid;place-items:center;padding:48px 24px}
.login-card{width:min(100%,480px);background:#fffef9;border:1px solid #e5e5d9;border-radius:24px;padding:42px;box-shadow:0 16px 60px #77794b0a}
.login-card h1{font-size:27px;line-height:1.5;margin:12px 0}
.login-card p{color:#72766a;line-height:1.8}
.login-card .field{display:block;margin:22px 0}
.login-card input{display:block;width:100%;margin-top:8px;padding:13px 14px;border:1px solid #d6dacd;border-radius:10px;background:#fffefb;color:#343c30;font:inherit;box-sizing:border-box}
.login-card .primary{width:100%;padding:14px;font-size:15px}
.login-card .form-error{color:#a74736;min-height:24px}
.login-flower{color:#ba9250;font-size:56px;margin:20px 0 0}
.login-hint{text-align:center;font-size:13px;margin-bottom:0}
.notice{display:flex;align-items:center;justify-content:space-between;gap:16px;background:#f6efdc;border:1px solid #e6d9b6;border-radius:12px;padding:14px 18px;margin-bottom:20px;line-height:1.7;color:#655a3d;font-size:14px}
.notice button{flex-shrink:0}
button:disabled{opacity:.55;cursor:wait}
#detail[inert]{opacity:.5}
#recover{font:inherit;color:#97602b;background:none;border:0;cursor:pointer;text-decoration:underline}
.panel-foot{flex-wrap:wrap;gap:8px}
