:root{--bg: #0f1115;--bg2: #171a21;--bg3: #1f2430;--fg: #e8eaf0;--fg-dim: #9aa3b2;--accent: #e8a1b0;--accent-deep: #d4718a;--user-bubble: #2b3a55;--ai-bubble: #1f2430;--border: #2a3040;--ok: #7ec8a3;--warn: #e0b364;--radius: 14px;--nav-h: 56px;--header-h: 52px}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Helvetica Neue,sans-serif;font-size:15px;-webkit-font-smoothing:antialiased;overscroll-behavior:none}.app{display:flex;flex-direction:column;height:100%;height:100dvh}.header{height:var(--header-h);display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 14px;padding-top:env(safe-area-inset-top);background:var(--bg2);border-bottom:1px solid var(--border);flex-shrink:0}.header h1{font-size:16px;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.header .pills{display:flex;gap:6px;align-items:center;flex-shrink:0}.pill{font-size:11px;padding:3px 9px;border-radius:999px;background:var(--bg3);color:var(--fg-dim);border:1px solid var(--border);white-space:nowrap}.pill.accent{color:var(--accent);border-color:var(--accent-deep)}.pill.ok{color:var(--ok)}.main{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch}.nav{height:calc(var(--nav-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);display:flex;background:var(--bg2);border-top:1px solid var(--border);flex-shrink:0}.nav button{flex:1;background:none;border:none;color:var(--fg-dim);font-size:12px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;cursor:pointer}.nav button.active{color:var(--accent)}.nav .icon{font-size:20px;line-height:1}.chat{display:flex;flex-direction:column;height:100%}.msgs{flex:1;overflow-y:auto;padding:14px 12px 8px;display:flex;flex-direction:column;gap:10px}.msg{display:flex;gap:8px;max-width:90%}.msg.user{align-self:flex-end;flex-direction:row-reverse}.msg.assistant{align-self:flex-start}.msg-col{display:flex;flex-direction:column;min-width:0}.msg.user .msg-col{align-items:flex-end}.msg.assistant .msg-col{align-items:flex-start}.avatar{border-radius:50%;object-fit:cover;flex-shrink:0;border:1px solid var(--border)}.avatar-fallback{display:flex;align-items:center;justify-content:center;font-size:17px}.avatar-fallback.ai{background:linear-gradient(135deg,#3a2a3f,#22303f)}.avatar-fallback.user{background:linear-gradient(135deg,#2a3350,#232a3d)}.msg-name{font-size:11px;color:var(--fg-dim);margin-bottom:3px;padding:0 4px}.bubble{padding:9px 13px;border-radius:var(--radius);white-space:pre-wrap;word-break:break-word;line-height:1.55;font-size:calc(15px * var(--font-scale, 1))}.msg.user .bubble{background:var(--user-bubble);border-bottom-right-radius:4px}.msg.assistant .bubble{background:var(--ai-bubble);border-bottom-left-radius:4px;border:1px solid var(--border)}.meta{font-size:10px;color:var(--fg-dim);margin-top:3px;padding:0 4px;display:flex;gap:6px}.day-divider{text-align:center;font-size:11px;color:var(--fg-dim);margin:14px auto 6px;padding:3px 12px;background:var(--bg2);border:1px solid var(--border);border-radius:999px;width:fit-content}.kind-tag{color:var(--warn)}.thinking{margin-bottom:5px;max-width:100%;border:1px dashed var(--border);border-radius:10px;background:#e8a1b00a;font-size:12.5px;color:var(--fg-dim)}.thinking summary{padding:6px 11px;cursor:pointer;list-style:none;color:var(--accent);font-size:12px;-webkit-user-select:none;user-select:none}.thinking summary::-webkit-details-marker{display:none}.thinking .t-body{padding:2px 11px 9px;white-space:pre-wrap;word-break:break-word;line-height:1.5}.msg-img{max-width:min(240px,70vw);max-height:320px;border-radius:12px;border:1px solid var(--border);cursor:pointer;object-fit:cover}.msg-sticker{width:120px;height:120px;object-fit:contain;cursor:pointer}.pending-img{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--bg2);border-top:1px solid var(--border)}.pending-img img{height:56px;border-radius:8px;border:1px solid var(--border)}.pending-img button{background:var(--bg3);border:1px solid var(--border);color:var(--fg-dim);border-radius:50%;width:24px;height:24px;cursor:pointer;font-size:12px}.sticker-panel{background:var(--bg2);border-top:1px solid var(--border);max-height:230px;overflow-y:auto;flex-shrink:0}.sticker-head{display:flex;justify-content:space-between;align-items:center;padding:8px 14px 0;font-size:12px;color:var(--fg-dim)}.sticker-mng{background:none;border:none;color:var(--accent);font-size:12px;cursor:pointer}.sticker-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(72px,1fr));gap:8px;padding:10px 12px 14px}.sticker-cell{position:relative;aspect-ratio:1}.sticker-cell img{width:100%;height:100%;object-fit:contain;border-radius:8px;background:var(--bg3);cursor:pointer}.sticker-cell img:active{transform:scale(.92)}.sticker-del{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;background:#c0392b;color:#fff;border:none;font-size:11px;cursor:pointer}.sticker-name{font-size:10px;color:var(--fg-dim);text-align:center;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sticker-add{aspect-ratio:1;border:1px dashed var(--border);border-radius:8px;background:none;color:var(--fg-dim);font-size:22px;cursor:pointer}.icon-btn{background:none!important;border:none;font-size:21px;padding:6px 2px!important;cursor:pointer;flex-shrink:0}.inputbar{display:flex;gap:8px;padding:8px 10px;background:var(--bg2);border-top:1px solid var(--border);flex-shrink:0;align-items:flex-end}.inputbar textarea{flex:1;resize:none;border:1px solid var(--border);border-radius:14px;background:var(--bg3);color:var(--fg);padding:13px 15px;font-size:calc(16px * var(--font-scale, 1));font-family:inherit;line-height:1.45;min-height:48px;max-height:140px;outline:none}.inputbar textarea:focus{border-color:var(--accent-deep)}.inputbar button{border:none;border-radius:14px;background:var(--accent-deep);color:#fff;padding:13px 22px;font-size:16px;cursor:pointer;flex-shrink:0;align-self:stretch}.inputbar button:disabled{opacity:.45}.typing{color:var(--fg-dim);font-size:12px;padding:0 4px}.memory{padding:12px;display:flex;flex-direction:column;gap:10px}.subtabs{display:flex;gap:6px;background:var(--bg2);border:1px solid var(--border);border-radius:12px;padding:4px}.subtabs button{flex:1;border:none;background:none;color:var(--fg-dim);padding:8px;border-radius:9px;font-size:13px;cursor:pointer}.subtabs button.active{background:var(--bg3);color:var(--accent)}.recap-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.recap-head .hint-inline{font-size:12px;color:var(--fg-dim);flex:1}.recap-head button{border:none;border-radius:9px;background:var(--accent-deep);color:#fff;padding:8px 14px;font-size:13px;cursor:pointer}.recap-head button:disabled{opacity:.5}.recap-date{font-size:13px;color:var(--accent);margin-bottom:6px;font-weight:600}.recap-mood{color:var(--warn);font-weight:400;font-size:12px}.dream-card{background:linear-gradient(135deg,#3a2a3f59,#22303f59);border-color:var(--accent-deep)}.note-card{background:linear-gradient(135deg,#506e9647,#785a8238);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px}.note-card.empty{color:var(--fg-dim);font-size:13px;text-align:center}.nc-weather{font-size:13px;color:var(--fg-dim);margin-bottom:6px}.nc-note{font-size:15px;line-height:1.5}.heatmap-wrap{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:14px}.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.cal-title{font-size:14px;color:var(--accent);font-weight:600}.cal-nav{width:30px;height:30px;border-radius:8px;border:1px solid var(--border);background:var(--bg3);color:var(--fg);font-size:16px;cursor:pointer}.cal-nav:disabled{opacity:.35}.cal-dow{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-bottom:5px}.cal-dow div{text-align:center;font-size:11px;color:var(--fg-dim)}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}.cal-empty{aspect-ratio:1}.cal-cell{aspect-ratio:1;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--fg-dim)}.cal-cell.lv0{background:#2a2f3a}.cal-cell.lv1{background:#6e4a52;color:#e8d5da}.cal-cell.lv2{background:#9c5c6b;color:#fff}.cal-cell.lv3{background:#c9718a;color:#fff}.cal-cell.lv4{background:#e8a1b0;color:#3a2028}.cal-cell.cal-today{box-shadow:0 0 0 2px var(--accent);color:var(--fg)}.cal-cell.cal-future{background:transparent;color:#3a3f4a}.hm-legend{display:flex;align-items:center;gap:5px;margin-top:14px;font-size:11px;color:var(--fg-dim)}.cal-dot{width:14px;height:14px;border-radius:4px}.cal-dot.lv0{background:#2a2f3a}.cal-dot.lv1{background:#6e4a52}.cal-dot.lv2{background:#9c5c6b}.cal-dot.lv3{background:#c9718a}.cal-dot.lv4{background:#e8a1b0}.health-card{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:12px 10px}.hc-cell{text-align:center}.hc-cell.pending{opacity:.5}.hc-icon{font-size:17px}.hc-val{font-size:18px;font-weight:600;margin-top:2px}.hc-cell.pending .hc-val{font-size:12px;font-weight:400;color:var(--fg-dim)}.hc-label{font-size:11px;color:var(--fg-dim);margin-top:1px}.rec-section{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px}.rec-title{font-size:14px;color:var(--accent);font-weight:600;margin-bottom:8px;display:flex;justify-content:space-between}.rec-total{color:var(--warn);font-size:13px}.rec-empty{font-size:12.5px;color:var(--fg-dim);line-height:1.5}.rec-line{padding:6px 0;border-bottom:1px solid var(--border);font-size:14px;line-height:1.4}.rec-line:last-child{border-bottom:none}.rec-tag{display:inline-block;font-size:11px;color:var(--accent);background:var(--bg3);border-radius:6px;padding:1px 6px;margin-right:8px}.rec-amount{display:inline-block;color:var(--warn);font-weight:600;min-width:52px}.todo-add{margin-bottom:8px}.todo-add input{width:100%;border:1px solid var(--border);border-radius:9px;background:var(--bg3);color:var(--fg);padding:8px 11px;font-size:14px;outline:none}.todo-row{display:flex;align-items:center;gap:9px;padding:7px 0;border-bottom:1px solid var(--border)}.todo-row:last-child{border-bottom:none}.todo-row.done .todo-text{color:var(--fg-dim);text-decoration:line-through}.todo-check{font-size:18px;cursor:pointer;color:var(--accent)}.todo-text{flex:1;font-size:14px}.todo-del{background:none;border:none;color:var(--fg-dim);cursor:pointer;font-size:14px}.searchrow{display:flex;gap:8px}.searchrow input{flex:1;border:1px solid var(--border);border-radius:10px;background:var(--bg3);color:var(--fg);padding:9px 12px;font-size:14px;outline:none}.searchrow button{border:none;border-radius:10px;background:var(--accent-deep);color:#fff;padding:9px 16px;cursor:pointer}.tagbar{display:flex;gap:6px;flex-wrap:wrap}.tag{font-size:11px;padding:3px 10px;border-radius:999px;cursor:pointer;background:var(--bg3);color:var(--fg-dim);border:1px solid var(--border)}.tag.active{color:var(--accent);border-color:var(--accent-deep)}.memcard{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px}.memcard .content{line-height:1.6;white-space:pre-wrap;word-break:break-word}.memcard .foot{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap;align-items:center;font-size:11px;color:var(--fg-dim)}.hint{color:var(--fg-dim);font-size:13px;text-align:center;padding:30px 20px;line-height:1.7}.settings{padding:14px 14px 40px;display:flex;flex-direction:column;gap:18px}.section{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:14px}.section h2{font-size:14px;color:var(--accent);margin-bottom:12px;font-weight:600}.field{margin-bottom:12px}.field:last-child{margin-bottom:0}.field label{display:block;font-size:12.5px;color:var(--fg-dim);margin-bottom:5px}.field input[type=text],.field input[type=password],.field input[type=number],.field input[type=time],.field select,.field textarea{width:100%;border:1px solid var(--border);border-radius:10px;background:var(--bg3);color:var(--fg);padding:9px 12px;font-size:14px;font-family:inherit;outline:none}.field textarea{min-height:110px;resize:vertical;line-height:1.5}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--accent-deep)}.field .note{font-size:11px;color:var(--fg-dim);margin-top:4px;line-height:1.5}.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}.switchrow{display:flex;align-items:center;justify-content:space-between;padding:4px 0}.switchrow .lbl{font-size:14px}.switch{position:relative;width:46px;height:26px;flex-shrink:0}.switch input{opacity:0;width:0;height:0}.switch .slider{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:999px;background:var(--bg3);border:1px solid var(--border);transition:.2s;cursor:pointer}.switch .slider:before{content:"";position:absolute;width:20px;height:20px;border-radius:50%;background:var(--fg-dim);top:2px;left:2px;transition:.2s}.switch input:checked+.slider{background:var(--accent-deep);border-color:var(--accent-deep)}.switch input:checked+.slider:before{transform:translate(20px);background:#fff}.font-scale-row{display:flex;gap:8px}.font-scale-row button{flex:1;padding:10px;border-radius:10px;border:1px solid var(--border);background:var(--bg3);color:var(--fg-dim);cursor:pointer}.font-scale-row button.active{border-color:var(--accent-deep);color:var(--accent);background:#d4718a14}.provider-toggle{display:flex;gap:8px}.provider-toggle button{flex:1;padding:12px;border-radius:10px;border:1px solid var(--border);background:var(--bg3);color:var(--fg-dim);font-size:14px;cursor:pointer}.provider-toggle button.active{border-color:var(--accent-deep);color:var(--accent);background:#d4718a14}.provider-toggle .sub{display:block;font-size:10.5px;margin-top:3px}.festrow{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--border);font-size:13.5px}.festrow:last-child{border-bottom:none}.festrow .fname{flex:1}.festrow .fdate{color:var(--fg-dim);font-size:12px}.festrow .del{background:none;border:none;color:var(--fg-dim);font-size:16px;cursor:pointer;padding:2px 6px}.festadd{display:flex;gap:6px;margin-top:10px}.festadd input{flex:1;min-width:0;border:1px solid var(--border);border-radius:8px;background:var(--bg3);color:var(--fg);padding:7px 10px;font-size:13px;outline:none}.festadd input.fdate-in{flex:0 0 74px}.festadd button{border:none;border-radius:8px;background:var(--accent-deep);color:#fff;padding:7px 14px;cursor:pointer}.savebar{position:sticky;bottom:10px;display:flex;justify-content:center;margin-top:6px}.savebar button{border:none;border-radius:999px;background:var(--accent-deep);color:#fff;padding:12px 44px;font-size:15px;cursor:pointer;box-shadow:0 4px 18px #0006}.savebar button:disabled{opacity:.5}.saved-toast{text-align:center;color:var(--ok);font-size:13px}.error-banner{background:#e064641f;border:1px solid rgba(224,100,100,.4);color:#e6a0a0;border-radius:10px;padding:9px 13px;font-size:13px;margin:8px 12px;white-space:pre-wrap}.avatar-row{display:flex;gap:24px;justify-content:center;padding:6px 0}.avatar-pick{display:flex;flex-direction:column;align-items:center;gap:8px;cursor:pointer;font-size:12px;color:var(--fg-dim)}.avatar-pick .avatar{border-width:2px}.avatar-pick:active{opacity:.7}.notify-btn{border:none;border-radius:10px;background:var(--accent-deep);color:#fff;padding:9px 18px;font-size:14px;cursor:pointer}.notify-banner{position:fixed;top:calc(env(safe-area-inset-top) + 8px);left:10px;right:10px;z-index:100;display:flex;align-items:center;gap:10px;padding:11px 13px;border-radius:14px;background:#1f2430f5;border:1px solid var(--accent-deep);box-shadow:0 6px 24px #00000080;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);cursor:pointer;animation:nb-slide .28s ease-out;max-width:480px;margin:0 auto}@keyframes nb-slide{0%{transform:translateY(-120%);opacity:0}to{transform:translateY(0);opacity:1}}.notify-banner .nb-body{flex:1;min-width:0}.notify-banner .nb-title{font-size:11.5px;color:var(--accent);margin-bottom:2px}.notify-banner .nb-text{font-size:13.5px;color:var(--fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notify-banner .nb-close{background:none;border:none;color:var(--fg-dim);font-size:15px;cursor:pointer;padding:4px 6px;flex-shrink:0}.token-badge{display:flex;align-items:center;gap:5px;padding:4px 9px;border-radius:999px;background:var(--bg3);border:1px solid var(--border);font-size:10.5px;color:var(--fg-dim);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;flex-shrink:0}.token-badge .tb-label{color:var(--accent);font-weight:600}.token-badge .tb-cost{color:var(--warn)}@media(min-width:700px){.main>*{max-width:680px;margin-left:auto;margin-right:auto}.chat{max-width:680px;margin:0 auto;width:100%}}.app-loading{min-height:100dvh;display:flex;align-items:center;justify-content:center;color:var(--fg-dim);background:var(--bg)}.login-wrap{min-height:100dvh;display:flex;align-items:center;justify-content:center;background:radial-gradient(120% 80% at 50% 0%,#1a1420 0%,var(--bg) 60%);padding:24px calc(24px + env(safe-area-inset-right)) 24px calc(24px + env(safe-area-inset-left))}.login-card{width:100%;max-width:360px;text-align:center;background:var(--bg2);border:1px solid var(--border);border-radius:20px;padding:32px 24px 28px;box-shadow:0 12px 40px #0006}.login-logo{font-size:44px;line-height:1;margin-bottom:12px}.login-title{font-size:22px;font-weight:700;color:var(--fg)}.login-sub{font-size:13px;color:var(--fg-dim);margin-top:4px;margin-bottom:24px}.login-form{display:flex;flex-direction:column;gap:14px}.login-form input{width:100%;height:52px;padding:0 16px;font-size:17px;color:var(--fg);background:var(--bg3);border:1.5px solid var(--border);border-radius:12px;outline:none;transition:border-color .15s}.login-form input:focus{border-color:var(--accent-deep)}.login-form input::placeholder{color:var(--fg-dim)}.login-form button[type=submit]{height:52px;margin-top:4px;font-size:17px;font-weight:600;color:#fff;border:none;border-radius:12px;cursor:pointer;background:linear-gradient(135deg,var(--accent) 0%,var(--accent-deep) 100%)}.login-form button[type=submit]:disabled{opacity:.5}.login-err{color:#ef9aa8;font-size:14px;text-align:left}
