:root{--ink:#262930;--muted:#8b9297;--aqua:#27adc2;--pale:#e8f8fa;--line:#e9edef;--pink:#ec7f9a;--pinkp:#fff0f4;--blue:#4a9cec;--bluep:#edf6ff;--shadow:0 10px 30px #24444d12}*{box-sizing:border-box}body{margin:0;background:#f7fbfc;color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}button,input,textarea{font:inherit}button{cursor:pointer}.app-shell{width:min(100%,680px);margin:auto;padding:28px 18px 56px}.topbar,.calendar-heading{display:flex;justify-content:space-between;align-items:center}.topbar{margin-bottom:25px}.brand-button{border:0;background:none;text-align:left;padding:0}.brand-button span{display:block;color:var(--aqua);font-size:10px;font-weight:800;letter-spacing:1.4px}.brand-button strong{font-size:27px}.header-actions{display:flex;gap:8px}.header-actions button,.header-actions label,.month-button{border:1px solid var(--line);background:#fff;color:var(--aqua);width:38px;height:38px;border-radius:50%;display:grid;place-items:center;font-size:20px}.calendar-hero{background:#e9f9fc;border-radius:23px;padding:23px;margin-bottom:18px}.calendar-hero p{color:var(--aqua);font-size:13px;font-weight:bold;margin:0}.calendar-hero h1{font-size:25px;margin:7px 0}.calendar-hero span,.calendar-tip{color:var(--muted);font-size:13px}.calendar-card{background:#fff;border:1px solid var(--line);border-radius:22px;padding:20px;box-shadow:var(--shadow)}.month-button{width:32px;height:32px;font-size:24px}.weekdays,.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);text-align:center}.weekdays{color:#a5acb0;font-size:12px;font-weight:bold;margin:19px 0 8px}.calendar-grid{gap:5px}.day{position:relative;min-height:58px;border:0;border-radius:13px;background:#fff;color:var(--ink);padding:5px 2px;font-size:13px}.day:hover,.day.is-today{background:var(--pale)}.day.is-today{color:var(--aqua);font-weight:bold}.day.is-empty{background:transparent;pointer-events:none}.day-faces{display:flex;justify-content:center;gap:2px;margin-top:4px}.day-faces img,.day-faces i{display:block;width:20px;height:20px;border-radius:50%;object-fit:cover}.day-dot{position:absolute;bottom:5px;left:calc(50% - 2px);width:4px;height:4px;border-radius:50%;background:var(--aqua)}.calendar-tip{text-align:center;margin:17px 0 0}.back-button{border:0;background:none;color:var(--aqua);font-weight:bold;padding:0;margin:4px 0 20px}.day-heading{display:flex;align-items:center;gap:13px;margin-bottom:20px}.day-heading>p{color:var(--aqua);font-size:30px;border-right:1px solid var(--line);padding-right:12px}.day-heading h1{font-size:21px;margin:0 0 3px}.day-heading span{color:var(--muted);font-size:12px}.people-grid{display:grid;gap:18px}.person-card{border:1px solid var(--line);border-top:5px solid var(--person);border-radius:22px;overflow:hidden;background:#fff;box-shadow:var(--shadow)}.person-card button{color:var(--person)}.person-head{display:flex;align-items:center;gap:10px;padding:16px;background:var(--person-pale);text-align:left;width:100%;border:0}.person-avatar{width:48px;height:48px;border-radius:50%;object-fit:cover;background:#fff}.person-name{font-size:20px;font-weight:800}.person-subtitle{display:block;color:#7e858a;font-size:12px;margin-top:3px}.person-arrow{margin-left:auto;font-size:24px}.person-preview{padding:13px 16px;color:#80898e;font-size:13px}.person-history{background:#fff;border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow);overflow:hidden;max-height:65vh;overflow-y:auto}.person-history-empty{text-align:center;color:#a4abb0;line-height:1.7;margin:75px 0}.person-detail-head{border-radius:22px;padding:19px;display:flex;align-items:center;gap:13px;margin-bottom:17px;background:var(--person-pale);border-left:5px solid var(--person)}.person-detail-head .person-avatar{width:58px;height:58px}.person-detail-head h1{margin:0;font-size:25px}.person-detail-head p{margin:4px 0 0;color:#798187;font-size:13px}.draw-link{margin-left:auto;border:0;background:#fff;color:var(--person);border-radius:99px;padding:8px 10px;font-size:12px;font-weight:bold}.record-item{display:grid;grid-template-columns:50px 1fr auto;gap:10px;align-items:start;text-align:left;width:100%;border:0;border-bottom:1px solid var(--line);background:#fff;padding:15px 16px}.record-time{color:var(--person);font-size:14px;font-weight:800}.record-content p{margin:0;line-height:1.42;font-size:14px;white-space:pre-wrap}.mood-tag{border-radius:4px;color:#fff;padding:4px 7px;font-size:12px;white-space:nowrap}.fab{position:fixed;right:max(25px,calc((100vw - 680px)/2 + 20px));bottom:30px;width:62px;height:62px;border-radius:50%;border:0;background:var(--aqua);color:#fff;font-size:42px;box-shadow:0 9px 19px #27adc255}.modal-backdrop{position:fixed;inset:0;z-index:10;background:#19292c80;display:flex;align-items:end;justify-content:center}.modal-backdrop[hidden]{display:none}.sheet{width:min(100%,680px);max-height:92vh;overflow:auto;background:#fff;border-radius:26px 26px 0 0;padding:18px 21px 32px}.sheet-top{display:grid;grid-template-columns:44px 1fr 44px;text-align:center;align-items:center;margin-bottom:25px}.sheet-top h2{margin:0;font-size:18px}.close-button,.save-link{border:0;background:none;color:var(--aqua);font-weight:bold}.close-button{font-size:29px;color:#9aa3a7}.field-label{display:block;font-size:14px;font-weight:bold;margin:18px 0 9px}.time-input,textarea{width:100%;border:1px solid var(--line);border-radius:12px;padding:12px;outline:none}.mood-options{display:flex;gap:7px}.mood{border:1px solid var(--line);border-radius:14px;background:#fff;flex:1;padding:8px 5px;display:grid;justify-items:center;gap:3px;font-size:11px}.mood b{font-size:22px}.mood[aria-pressed="true"]{border-color:var(--aqua);background:var(--pale);color:var(--aqua)}.counter{text-align:right;color:#a4abb0;font-size:12px;margin:6px}.delete-link{display:block;margin:24px auto 0;border:0;background:none;color:#e27676}.draw-sheet>p,.draw-actions span{color:var(--muted);font-size:13px}.draw-sheet canvas{display:block;max-width:100%;margin:auto;border:2px dashed #bcdde1;border-radius:50%;touch-action:none;background:#f5fcfc}.draw-actions{display:flex;justify-content:space-between;align-items:center;margin-top:16px}.draw-actions button{border:0;border-radius:99px;padding:8px 12px;background:var(--pale);color:var(--aqua)}.toast{position:fixed;z-index:20;left:50%;bottom:25px;transform:translate(-50%,100px);background:#283437;color:#fff;padding:11px 17px;border-radius:99px;transition:.25s}.toast.show{transform:translate(-50%,0)}.photo-hint{margin:-2px 0 10px;color:var(--muted);font-size:12px;line-height:1.45}.photo-actions{display:flex;gap:10px}.photo-button{display:inline-flex;align-items:center;justify-content:center;min-height:40px;border:0;border-radius:12px;background:var(--aqua);color:#fff;padding:0 15px;font-size:14px;font-weight:700}.photo-button-secondary{background:#fff;color:var(--aqua);border:1px solid var(--aqua)}.photo-preview,.record-photos{display:flex;flex-wrap:wrap;gap:8px}.photo-preview{margin-top:12px}.photo-thumb{position:relative;display:block;width:76px;height:76px;border-radius:11px;overflow:hidden;background:#edf3f5}.photo-thumb img{width:100%;height:100%;object-fit:cover}.photo-remove{position:absolute;top:3px;right:3px;width:22px;height:22px;border:0;border-radius:50%;background:#263339d9;color:#fff;font-size:17px;line-height:1}.record-photos{margin-top:9px}.record-photos .photo-thumb{width:58px;height:58px}.photo-count{color:var(--muted);font-size:12px;white-space:nowrap}.save-link:disabled{opacity:.55;cursor:wait}@media(max-width:480px){.app-shell{padding:20px 12px 44px}.calendar-card{padding:14px}.day{min-height:49px}.day-faces img,.day-faces i{width:17px;height:17px}.person-history{max-height:68vh}.mood-options{gap:5px}.record-photos .photo-thumb{width:52px;height:52px}}
 .sheet h3{margin:18px 0 7px;font-size:16px}.sheet p{color:var(--muted);line-height:1.5}.sheet label{display:block;font-size:13px;font-weight:700;margin:16px 0 8px}.sheet input{width:100%;border:1px solid var(--line);border-radius:12px;padding:12px;outline:none}.sheet hr{border:0;border-top:1px solid var(--line);margin:23px 0}
