:root{--paper: #f2f0e8;--card: #fbfaf5;--card2: #fffdf8;--ink: #16201c;--ink2: #465049;--ink3: #8b938e;--line: #d8d2c2;--line2: #bec5be;--red: #e64a36;--red-dark: #c93828;--blue: #167d83;--blue-soft: #e2efee;--rose: #c8556b;--rose-soft: #f9e7eb;--green: #497b33;--serif: "Noto Serif SC", "Source Han Serif SC", "Songti SC", STSong, SimSun, serif;--sans: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--mono: ui-monospace, "SF Mono", "DM Mono", Consolas, "Courier New", monospace}*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}html{-webkit-text-size-adjust:100%}body{font-family:var(--sans);color:var(--ink);background:var(--paper);background-image:radial-gradient(rgba(22,32,28,.055) .7px,transparent .7px);background-size:12px 12px;line-height:1.7;-webkit-font-smoothing:antialiased}button{font-family:inherit;cursor:pointer;border:0;background:none}input,textarea{font-family:inherit;outline:none}.boot{height:100%;display:grid;place-items:center}.app{min-height:100%;max-width:560px;margin:0 auto;padding:max(10px,env(safe-area-inset-top)) 16px calc(92px + env(safe-area-inset-bottom));display:flex;flex-direction:column}.app-inner{display:flex;flex-direction:column;flex:1;position:relative}.app-head{position:sticky;top:0;z-index:15;display:flex;align-items:center;gap:9px;padding:6px 2px;margin:0 -2px;background:#fbfaf5ed;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);border-bottom:1px solid var(--line)}.app-mark{width:28px;height:33px;background:var(--red);color:#fff;display:grid;place-items:center;font-family:var(--serif);font-weight:900;font-size:17px;clip-path:polygon(0 0,100% 0,100% 82%,76% 100%,0 100%);flex:none;box-shadow:2px 3px #16201c24}.app-head strong{font-family:var(--serif);font-size:18px;letter-spacing:1.5px}.app-head .head-date{margin-left:auto;text-align:right;font:10px var(--mono);color:var(--ink3);line-height:1.5;border:0;padding:4px 0 4px 8px}.app-head .head-date b{display:block;font-size:16px;color:var(--ink);font-family:var(--mono);letter-spacing:1px}button.head-date{cursor:pointer}button.head-date:active b{color:var(--red-dark)}.note{position:relative;margin-top:18px;background:var(--card2);border:1px solid var(--line);padding:24px 15px 11px;transform:rotate(-.5deg);box-shadow:3px 4px #16201c12;text-align:left;width:100%}.note.alt{transform:rotate(.4deg)}.tape{position:absolute;top:-9px;width:62px;height:18px;opacity:.72;background:repeating-linear-gradient(45deg,#ffffff40 0,#ffffff40 4px,#0000000d 4px,#0000000d 8px)}.tape.t1{left:20px;background-color:var(--blue);transform:rotate(-6deg)}.tape.t2{right:20px;background-color:var(--rose);transform:rotate(5deg)}.note-label{position:absolute;top:-9px;left:50%;transform:translate(-50%);font:10px var(--mono);color:var(--ink3);letter-spacing:2px;background:var(--card);padding:0 8px}.note p{font-family:var(--serif);font-size:14px;line-height:1.9;color:var(--ink);white-space:pre-wrap;word-break:break-word}.note p.empty{color:var(--ink3)}.note .by{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:10px;font:10px var(--mono);color:var(--ink3)}.note .by .who{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pill{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border:1px solid var(--ink);font:10px var(--mono);background:var(--card);flex:none}.pill b{color:var(--red-dark)}.pill.done{background:var(--ink);color:#fff;border-color:var(--ink)}.pill.done b{color:#9dcc62}.cols{position:relative;display:grid;grid-template-columns:1fr 1fr;margin-top:16px;align-items:start}.gutter{position:absolute;top:4px;bottom:6px;left:50%;border-left:1.5px dashed #cbc4b0}.col{padding:0 13px;min-width:0}.col:first-child{padding-left:2px}.col:last-child{padding-right:2px}.col-head{display:flex;align-items:center;gap:8px}.avatar{width:31px;height:31px;border-radius:50%;display:grid;place-items:center;font-family:var(--serif);font-weight:900;font-size:15px;color:#fff;flex:none;box-shadow:inset 0 0 0 1.5px #ffffff8c}.avatar.he{background:var(--blue)}.avatar.she{background:var(--rose)}.col-head strong{font-family:var(--serif);font-size:15px}.col-head em{margin-left:auto;font:11px var(--mono);font-style:normal;color:var(--ink3)}.bar{height:3px;margin:8px 0 4px;background:#e6e1d2;position:relative;overflow:hidden}.bar i{position:absolute;inset:0 auto 0 0;display:block;transition:width .35s ease}.bar i.he{background:var(--blue)}.bar i.she{background:var(--rose)}.todo{display:flex;align-items:flex-start;gap:8px;margin:7px 0;padding:8px 9px 8px 8px;background:var(--card2);border:1px solid var(--line);border-radius:6px;box-shadow:2px 2px #16201c0d;position:relative}.check{width:18px;height:18px;flex:none;border:1.5px solid var(--ink2);border-radius:50%;margin-top:2px;display:grid;place-items:center;font-size:10px;color:#fff;background:transparent;padding:0;transition:transform .15s ease}button.check:active{transform:scale(.82)}.todo.done .check{border-color:var(--red);background:var(--red);animation:pop .3s ease}@keyframes pop{0%{transform:scale(.6)}60%{transform:scale(1.18)}to{transform:scale(1)}}.todo span{font-size:14px;line-height:1.6;color:var(--ink);word-break:break-word}.todo.done span{color:var(--ink3);text-decoration:line-through;text-decoration-color:#c9382899}.todo.done.he-card{background:var(--blue-soft);border-color:transparent;box-shadow:none}.todo.done.she-card{background:var(--rose-soft);border-color:transparent;box-shadow:none}.todo.carried:before{content:"";position:absolute;left:-1px;top:6px;bottom:6px;width:3px;border-radius:2px}.todo.carried.c-he:before{background:var(--blue);opacity:.45}.todo.carried.c-she:before{background:var(--rose);opacity:.45}.todo .del{margin-left:auto;color:#c4bdb0;font-size:14px;padding:0 2px;flex:none;line-height:1.4}.todo .del:active{color:var(--red-dark)}.fold{margin:7px 0;padding:6px 10px;border:1px dashed var(--line2);border-radius:6px;font:10px var(--mono);color:var(--ink3);background:#fffdf88c;display:flex;align-items:center;gap:5px;width:100%;text-align:left}.fold b{color:var(--red-dark);font-weight:400}.fold .tri{margin-left:auto}.fold:active{background:#16201c0d}.dock{position:fixed;left:0;right:0;bottom:0;z-index:30;display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--line);background:linear-gradient(to top,#f2f0e8fa 62%,#f2f0e800);padding-top:10px}.dock-in{display:flex;align-items:center;gap:7px;padding:11px 13px;padding-bottom:calc(11px + env(safe-area-inset-bottom));margin:0 4px;border-radius:12px 12px 0 0;transition:background .2s,border-color .2s}.dock-in.he{background:linear-gradient(to top,var(--blue-soft),rgba(226,239,238,.55));border-top:2.5px solid var(--blue)}.dock-in.she{background:linear-gradient(to top,var(--rose-soft),rgba(249,231,235,.55));border-top:2.5px solid var(--rose)}.dock-in.focused.he{background:var(--blue-soft)}.dock-in.focused.she{background:var(--rose-soft)}.dock-in .plus{font-weight:900;font-size:15px;color:var(--ink2);flex:none}.dock-in.he .plus{color:var(--blue)}.dock-in.she .plus{color:var(--rose)}.dock-in input{flex:1;min-width:0;border:0;background:transparent;font-size:16px;color:var(--ink)}.dock-in input::placeholder{color:var(--ink2);font-size:13.5px}.carry{margin-top:10px;width:100%;text-align:left;border:1px dashed var(--ink2);background:#16201c09;padding:7px 10px;font-size:11.5px;color:var(--ink2);display:flex;align-items:center;gap:6px;border-radius:3px}.carry b{font-family:var(--mono);color:var(--red-dark);font-weight:400}.carry:active{background:#16201c12}.footer-mark{text-align:center;font:9px var(--mono);color:#b8b1a0;letter-spacing:2px;margin-top:18px;padding-bottom:4px}.footer-mark.green{color:var(--green)}.seal-done{position:absolute;top:205px;right:16px;width:108px;height:108px;z-index:5;border:3.5px solid var(--red-dark);color:var(--red-dark);border-radius:8px;transform:rotate(-12deg);display:grid;place-items:center;background:radial-gradient(rgba(201,56,40,.07) 1px,transparent 1.6px) 0 0 / 5px 5px;mix-blend-mode:multiply;opacity:.92;pointer-events:none;animation:stamp .45s cubic-bezier(.2,1.6,.4,1)}@keyframes stamp{0%{transform:rotate(-12deg) scale(1.9);opacity:0}70%{transform:rotate(-12deg) scale(.94);opacity:1}to{transform:rotate(-12deg) scale(1);opacity:.92}}.seal-done:after{content:"";position:absolute;top:6px;right:6px;bottom:6px;left:6px;border:1.5px solid var(--red-dark);border-radius:4px}.seal-done b{font-family:var(--serif);font-size:28px;letter-spacing:6px;text-indent:6px}.seal-done small{position:absolute;bottom:14px;font:8px var(--mono);letter-spacing:1px}.dim{position:fixed;top:0;right:0;bottom:0;left:0;background:#16201c73;z-index:40;animation:fade .2s ease}@keyframes fade{0%{opacity:0}to{opacity:1}}.sheet-pop{position:fixed;left:0;right:0;bottom:0;z-index:41;max-width:560px;margin:0 auto;background:var(--card);border-radius:22px 22px 0 0;border-top:2px solid var(--ink);padding:12px 20px calc(22px + env(safe-area-inset-bottom));display:flex;flex-direction:column;box-shadow:0 -14px 44px #16201c4d;animation:rise .28s cubic-bezier(.2,.9,.3,1)}@keyframes rise{0%{transform:translateY(60%);opacity:.4}to{transform:translateY(0);opacity:1}}.grip{width:40px;height:4px;border-radius:2px;background:var(--line2);margin:0 auto 12px}.sheet-pop h3{font-family:var(--serif);font-size:18px;letter-spacing:1px}.sheet-pop h3 small{font:10px var(--mono);color:var(--ink3);margin-left:10px;letter-spacing:1px;font-weight:400}.paper-input{margin-top:14px;min-height:120px;border:1px solid var(--line);background:repeating-linear-gradient(transparent 0 29px,#e3ddcc 29px,#e3ddcc 30px),var(--card2);padding:4px 12px;font-family:var(--serif);font-size:16px;line-height:30px;color:var(--ink);border-radius:2px;width:100%;resize:none;overflow-y:auto}.sheet-foot{display:flex;align-items:center;gap:10px;margin-top:14px}.sheet-foot small{font:10px var(--mono);color:var(--ink3)}.btn-seal{margin-left:auto;min-height:42px;padding:0 22px;background:var(--red);color:#fff;border:1px solid var(--ink);font-weight:700;font-size:14px;box-shadow:3px 3px 0 var(--ink)}.btn-seal:active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--ink)}.cal-card{margin-top:14px;background:var(--card2);border:1px solid var(--line);padding:12px 14px 10px;box-shadow:3px 4px #16201c12}.cal-nav{display:flex;align-items:center;justify-content:space-between}.cal-nav b{font-family:var(--serif);font-size:15px;letter-spacing:1px}.cal-nav span{font:10px var(--mono);color:var(--ink3)}.cal-nav button{font-size:17px;color:var(--ink2);padding:4px 12px}.cal-nav button:active{color:var(--red-dark)}table.cal{width:100%;border-collapse:collapse;margin-top:8px;text-align:center;table-layout:fixed}.cal th{font:9px var(--mono);color:var(--ink3);font-weight:400;padding:2px 0 6px}.cal td{font:11px var(--mono);color:var(--ink2);padding:1px 0;position:relative;height:30px}.cal td.blank{color:transparent}.cal td .d{display:inline-grid;place-items:center;width:23px;height:23px;border-radius:50%;font-family:inherit;font-size:inherit;color:inherit;padding:0}button.d{cursor:pointer}button.d:active{background:var(--blue-soft)}.cal td.fut button.d{color:#c9c3b4}.cal td.has:after{content:"";position:absolute;bottom:0;left:50%;transform:translate(-50%);width:3.5px;height:3.5px;border-radius:50%;background:var(--ink3)}.cal td.sel .d{background:var(--ink);color:#fff}.cal td.sel:after{background:var(--ink)}.cal td.today .d{box-shadow:inset 0 0 0 1.5px var(--red);color:var(--red-dark);font-weight:700}.cal-legend{display:flex;gap:14px;margin-top:8px;font:9px var(--mono);color:var(--ink3)}.cal-legend i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:4px;vertical-align:-1px}.day-title{display:flex;align-items:baseline;gap:8px;margin-top:16px}.day-title b{font-family:var(--serif);font-size:16px}.day-title small{font:10px var(--mono);color:var(--ink3);letter-spacing:1px}.day-title .ro{margin-left:auto;font:9px var(--mono);color:var(--red-dark);border:1px solid var(--red);padding:2px 8px;letter-spacing:1px;flex:none}.old-note{margin-top:10px;background:#f6f4ec;border:1px dashed var(--line);padding:10px 13px}.old-note p{font-family:var(--serif);font-size:13px;line-height:1.8;color:var(--ink2);white-space:pre-wrap;word-break:break-word}.old-note .by{margin-top:6px;font:9px var(--mono);color:var(--ink3)}.mini-cols{display:grid;grid-template-columns:1fr 1fr;margin-top:12px}.mini-cols .col{padding:0 10px}.mini-cols .todo{margin:6px 0;padding:6px 8px}.mini-cols .todo span{font-size:12px;color:var(--ink2)}.mini-cols .todo.done span{color:var(--ink3)}.mini-cols .avatar{width:27px;height:27px;font-size:13px}.mini-cols .col-head strong{font-size:13px}.mini-cols .col-head em{font-size:10px}.mini-cols .bar{margin:6px 0 3px}.back-day{margin-top:14px;display:flex;align-items:center;gap:8px}.back-day .hint{font:9px var(--mono);color:var(--ink3)}.back-btn{margin-left:auto;min-height:32px;padding:0 14px;background:var(--ink);color:#fff;border:1px solid var(--ink);font:10px var(--mono);letter-spacing:1px;box-shadow:2px 2px 0 var(--red)}.back-btn:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--red)}.empty-day{margin:26px auto 10px;text-align:center;font-family:var(--serif);color:var(--ink3);font-size:14px;line-height:2}.empty-day .zh{font-size:15px;color:var(--ink2)}.login{min-height:100%;max-width:560px;margin:0 auto;padding:40px 26px 30px;display:flex;flex-direction:column}.login-mark{display:flex;flex-direction:column;align-items:center;gap:10px;margin-top:8vh}.login-mark .seal{width:62px;height:62px;background:var(--red);position:relative;clip-path:polygon(0 0,100% 0,100% 82%,78% 100%,0 100%);box-shadow:5px 5px #16201c29}.login-mark .seal:after{content:"雀";position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;font-family:var(--serif);font-size:30px;font-weight:900;color:#fff}.login-mark h1{font-family:var(--serif);font-size:26px;font-weight:900;letter-spacing:4px}.login-mark .edition{font:10px var(--mono);color:var(--ink3);letter-spacing:2px}.login-box{margin-top:34px}.login-box h3{font-family:var(--serif);font-size:19px;text-align:center;letter-spacing:3px}.login-box .sub{text-align:center;font:10px var(--mono);color:var(--ink3);letter-spacing:1px;margin-top:5px}.pick{display:flex;gap:12px;margin:26px 0 18px}.pick button{flex:1;border:1.5px solid var(--line2);background:var(--card2);border-radius:5px;padding:18px 8px;display:flex;flex-direction:column;align-items:center;gap:9px;font-family:var(--serif);font-weight:700;font-size:15px;color:var(--ink)}.pick button.on{border-width:2px;box-shadow:3px 3px #16201c1f}.pick button.on.he{border-color:var(--blue);background:var(--blue-soft)}.pick button.on.she{border-color:var(--rose);background:var(--rose-soft)}.pick .avatar{width:44px;height:44px;font-size:19px}.pw{width:100%;min-height:46px;border:1px solid var(--line2);background:var(--card2);border-radius:3px;padding:0 14px;font:16px var(--mono);letter-spacing:4px;color:var(--ink)}.pw:focus{border-color:var(--ink2)}.go{margin-top:16px;width:100%;min-height:48px;background:var(--ink);color:#fff;border:1px solid var(--ink);font-weight:700;font-size:15px;letter-spacing:4px;box-shadow:4px 4px 0 var(--red)}.go:active{transform:translate(2px,2px);box-shadow:2px 2px 0 var(--red)}.go:disabled{opacity:.55}.login-err{margin-top:12px;text-align:center;font-size:12.5px;color:var(--red-dark);min-height:20px}.login-tip{margin-top:auto;padding-top:30px;text-align:center;font-size:11px;color:var(--ink3)}.me-bar{display:flex;align-items:center;gap:8px;margin-top:12px;font:10px var(--mono);color:var(--ink3)}.me-bar button{font:inherit;color:var(--ink2);border-bottom:1px dashed var(--line2);padding:2px 1px}.me-bar .right{margin-left:auto;display:flex;gap:12px}.me-bar button:active{color:var(--red-dark)}.toast{position:fixed;left:50%;bottom:90px;transform:translate(-50%);z-index:60;background:var(--ink);color:#f3f1e9;font-size:12.5px;padding:9px 18px;box-shadow:3px 3px #16201c40;white-space:nowrap;max-width:86vw;overflow:hidden;text-overflow:ellipsis;animation:toast-in .25s ease;display:flex;align-items:center;gap:12px}@keyframes toast-in{0%{transform:translate(-50%,12px);opacity:0}to{transform:translate(-50%);opacity:1}}.toast button{color:#9dcc62;font-weight:700;font-size:12.5px;flex:none;letter-spacing:1px}.stats-card{margin:26px 0;border:1px solid var(--ink);background:var(--card);box-shadow:7px 7px #16201c12;padding:30px 24px;text-align:center}.stats-card h3{font-family:var(--serif);font-size:19px;letter-spacing:2px}.stats-card p{font-size:13px;color:var(--ink2);margin-top:10px}.stats-card .edition{font:10px var(--mono);color:var(--ink3);letter-spacing:2px;margin-top:14px}.loading{text-align:center;color:var(--ink3);font:11px var(--mono);letter-spacing:2px;padding:30px 0}@media (min-width: 640px){.app{border-left:1px solid var(--line);border-right:1px solid var(--line)}}.todo{animation:todo-in .18s ease-out}@keyframes todo-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.todo>span{position:relative}.todo.done>span{text-decoration:none}.todo.done>span:after{content:"";position:absolute;left:0;top:58%;height:1.5px;width:100%;background:#c9382899;animation:strike .24s ease-out}@keyframes strike{0%{width:0}to{width:100%}}.check svg{width:10px;height:10px;stroke:#fff;stroke-width:1.8;fill:none;stroke-linecap:round;stroke-linejoin:round}.check svg path{stroke-dasharray:12;stroke-dashoffset:12}.todo.done .check svg path{animation:tick .2s ease-out forwards}@keyframes tick{to{stroke-dashoffset:0}}.todo.leaving{overflow:hidden;animation:leave .16s ease-in forwards}@keyframes leave{to{opacity:0;transform:translate(14px);max-height:0;margin:0}}.todo.leaving>span{opacity:.5}.pill b{display:inline-block}.pill b{animation:count-pop .2s ease}@keyframes count-pop{50%{transform:scale(1.3)}}.note.thud{animation:thud .16s ease-out}@keyframes thud{40%{transform:rotate(.4deg) translateY(3px)}to{transform:rotate(.4deg) translateY(0)}}.grip-zone{padding:6px 0 4px;margin:-6px 0 -4px;touch-action:none;cursor:grab}.edit-input{flex:1;border:0;border-bottom:1.5px solid var(--red);background:transparent;font-size:13.5px;line-height:1.55;color:var(--ink);padding:0 0 1px;min-width:0}.check.dimmed{opacity:.35}.skel{background:linear-gradient(100deg,#e9e5d8 40%,#f0ede1,#e9e5d8 60%);background-size:200% 100%;animation:breathe 1.4s ease-in-out infinite;border:1px solid var(--line)}@keyframes breathe{to{background-position:-200% 0}}.note-sk{height:92px;margin-top:18px;transform:rotate(-.5deg)}.skel-cols{display:grid;grid-template-columns:1fr 1fr;gap:26px;margin-top:18px}.col-sk{height:180px}.first-hint{text-align:center;font-family:var(--serif);font-size:14.5px;color:var(--ink3);letter-spacing:2px;margin-top:26px;animation:todo-in .3s ease-out}.sync-dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:6px;vertical-align:1px;background:#c9c3b4;transition:background .3s}.sync-dot.live{background:var(--green)}.sync-dot.polling{background:#c9c3b4}.sync-dot.connecting,.sync-dot.reconnecting{background:#d9b23c;animation:breathe-dot 1s ease-in-out infinite}@keyframes breathe-dot{50%{opacity:.35}}.sync-dot.offline{background:transparent;box-shadow:inset 0 0 0 1.5px var(--red)}.offline-bar{position:sticky;top:0;z-index:50;text-align:center;background:var(--red-dark);color:#fff;font:11px var(--mono);letter-spacing:2px;padding:5px 0;animation:toast-in .25s ease}.todo.dragging-src{opacity:1;background:#fffdf88c;border:1.5px dashed var(--line2);border-radius:6px;padding:2px 6px;min-height:22px}.todo.dragging-src>*{visibility:hidden}.float-todo{background:var(--card2);border:1px solid var(--ink);border-radius:5px;box-shadow:6px 8px #16201c2e,0 18px 36px #16201c29;transform:rotate(1.2deg) scale(1.04);padding:6px 10px;cursor:grabbing;display:flex;align-items:flex-start;gap:8px;width:max-content;max-width:46vw}.float-todo>span:last-child{font-size:13.5px;line-height:1.55;word-break:break-word}.float-todo .check{pointer-events:none}.col{transition:background .2s,box-shadow .2s;border-radius:6px}.col.receiving{background:#fffdf8b3;box-shadow:inset 0 0 0 1.5px var(--line2)}.col.receiving .avatar{animation:breathe-avatar .8s ease-in-out infinite}@keyframes breathe-avatar{50%{transform:scale(1.15)}}.handoff{margin:8px 0 2px;padding:6px 10px;border-radius:4px;text-align:center;font:11px var(--mono);letter-spacing:1px;color:#fff;animation:todo-in .2s ease-out}.handoff.he{background:var(--blue)}.handoff.she{background:var(--rose)}
