:root{--bg:#f6f3ec;--card:#fffdf8;--ink:#3b3733;--muted:#8c857c;--line:#e8e2d6;--accent:#c4554d;--accent-soft:#f7e9e4;--matcha:#7d9b76;--matcha-soft:#eef2ea;--gold:#c9a227;--shadow:0 1px 6px rgba(80,70,56,0.07);--radius:22px;--serif:"Songti SC","Hiragino Mincho ProN","Noto Serif SC","STSong",serif;--tabbar-h:calc(66px + env(safe-area-inset-bottom, 0px))}html{font-size:17px}html[data-ts=s]{font-size:15.5px}html[data-ts=l]{font-size:19.5px}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}body{margin:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans CJK SC,sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased}.page{max-width:560px;margin:0 auto;padding:20px 18px calc(var(--tabbar-h) + 28px);min-height:100dvh}.page.no-tabs{padding-bottom:36px}h1,h2,h3{margin:0;font-weight:600}.h1{font-family:var(--serif);font-size:1.5rem;letter-spacing:.06em;display:flex;align-items:center;gap:10px}.h1:before{content:"";width:4px;height:1.15em;border-radius:2px;background:var(--accent);flex-shrink:0}.h2{font-family:var(--serif);font-size:1.12rem;letter-spacing:.05em}.page-sub{font-size:.85rem;margin:2px 0 0 14px;letter-spacing:.08em}.muted,.page-sub{color:var(--muted)}.small{font-size:.85rem}a{color:inherit;text-decoration:none}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px;margin-bottom:16px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:52px;padding:10px 22px;border:1px solid var(--line);border-radius:16px;font-size:1.02rem;font-weight:600;font-family:inherit;background:#f1ece1;color:var(--ink);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:transform .06s ease,opacity .15s}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.45;pointer-events:none}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fffdf8}.btn-ghost{background:transparent;border-color:transparent}.btn-danger{background:#f7e9e4;border-color:#ecd2cb;color:#a4453d}.btn-block{display:flex;width:100%}.btn-big{min-height:60px;font-size:1.12rem;border-radius:18px}.input{width:100%;min-height:52px;padding:12px 16px;border:1.5px solid var(--line);border-radius:14px;font-size:1.02rem;font-family:inherit;color:var(--ink);background:#fffdf8;outline:none}.input:focus{border-color:var(--accent)}.row,.row-between{display:flex;align-items:center;gap:12px}.row-between{justify-content:space-between}.wrap{flex-wrap:wrap}.grow{flex:1 1;min-width:0}.stack{display:flex;flex-direction:column;gap:12px}.day-label{font-family:var(--serif);font-size:.95rem;font-weight:600;letter-spacing:.08em;color:var(--muted);margin:22px 4px 10px;display:flex;align-items:center;gap:10px}.day-label:after{content:"";flex:1 1;border-top:1px dashed var(--line)}.grid3{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:7px;gap:7px}.tile{position:relative;aspect-ratio:1;border-radius:16px;overflow:hidden;background:#efe9dd;border:1px solid var(--line);display:block;padding:0}.tile img{width:100%;height:100%;object-fit:cover;display:block}.tile-badge{position:absolute;top:6px;right:6px;background:rgba(59,55,51,.62);color:#fffdf8;font-size:.68rem;font-weight:700;padding:2px 7px;border-radius:99px}.tile-badge.ai{background:rgba(196,85,77,.92)}.tile-avatar{position:absolute;left:6px;bottom:6px}.tile-center{flex-direction:column;gap:6px;color:var(--muted);font-size:.8rem;text-align:center;padding:8px}.play-overlay,.tile-center{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.play-overlay{font-size:2rem;color:#fffdf8;text-shadow:0 1px 8px rgba(40,30,20,.5)}.avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;flex-shrink:0;line-height:1;border:1.5px solid rgba(255,253,248,.9)}.tabbar{position:fixed;bottom:0;left:0;right:0;height:var(--tabbar-h);padding-bottom:env(safe-area-inset-bottom,0);background:rgba(255,253,248,.96);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-top:1px solid var(--line);display:flex;z-index:50}.tabbar-inner{max-width:560px;margin:0 auto}.tab,.tabbar-inner{flex:1 1;display:flex}.tab{flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:.74rem;font-weight:600;letter-spacing:.06em;color:var(--muted)}.tab svg{width:26px;height:26px}.tab.active{color:var(--accent)}.tabbar.immersive{background:rgba(255,253,248,.6);transition:opacity .6s ease}.tabbar.immersive.dim{opacity:.3}.fab{position:fixed;right:max(18px,calc(50vw - 280px + 18px));bottom:calc(var(--tabbar-h) + 18px);width:62px;height:62px;border-radius:50%;background:var(--accent);color:#fffdf8;font-size:1.9rem;font-weight:300;border:none;box-shadow:0 5px 16px rgba(196,85,77,.38);cursor:pointer;z-index:40;display:flex;align-items:center;justify-content:center}.fab:active{transform:scale(.94)}.react-btn{display:inline-flex;align-items:center;gap:6px;min-height:48px;padding:6px 14px;border-radius:99px;border:1.5px solid var(--line);background:#fffdf8;font-size:1.12rem;font-family:inherit;cursor:pointer}.react-btn .count{font-size:.92rem;font-weight:700;color:var(--muted)}.react-btn.on{border-color:var(--accent);background:var(--accent-soft)}.react-btn.on .count{color:var(--accent)}.choice{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;min-height:76px;border-radius:16px;border:1.5px solid var(--line);background:#fffdf8;font-size:.93rem;font-weight:600;font-family:inherit;color:var(--ink);cursor:pointer;padding:8px 4px}.choice .emoji{font-size:1.65rem;line-height:1}.choice.on{border-color:var(--accent);background:var(--accent-soft)}.grid4{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:8px;gap:8px}.spin{width:26px;height:26px;border-radius:50%;border:2.5px solid var(--line);border-top-color:var(--accent);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.toast{position:fixed;top:calc(env(safe-area-inset-top, 0px) + 14px);left:50%;transform:translateX(-50%);background:rgba(59,55,51,.95);color:#fffdf8;padding:12px 22px;border-radius:99px;font-size:.98rem;font-weight:600;letter-spacing:.03em;z-index:100;box-shadow:0 6px 22px rgba(40,30,20,.22);max-width:88vw;text-align:center;animation:toast-in .25s ease}@keyframes toast-in{0%{opacity:0;transform:translateX(-50%) translateY(-12px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}.progressbar{height:8px;border-radius:99px;background:var(--line);overflow:hidden}.progressbar>div{height:100%;background:var(--accent);border-radius:99px;transition:width .2s ease}.empty{text-align:center;padding:52px 24px;color:var(--muted);letter-spacing:.04em}.empty .emoji{font-size:2.6rem;display:block;margin-bottom:14px}.divider{height:1px;background:none;border:none;border-top:1px dashed var(--line);margin:14px 0}.media-full{width:100%;border-radius:var(--radius);display:block;background:#2a2622;border:1px solid var(--line)}.badge-demo{display:inline-block;background:#f5edd8;color:#8a6d1c;font-size:.78rem;font-weight:700;padding:3px 10px;border-radius:99px}.seg{display:flex;background:#efe9dd;border-radius:14px;padding:4px;gap:4px}.seg button{flex:1 1;min-height:44px;border:none;border-radius:11px;background:transparent;font-size:.98rem;font-weight:600;font-family:inherit;color:var(--muted);cursor:pointer}.seg button.on{background:#fffdf8;color:var(--ink);box-shadow:0 1px 3px rgba(80,70,56,.1)}.haven-bubble{position:absolute;transform:translate(-50%,calc(-100% - 7px));width:max-content;max-width:138px;background:rgba(255,252,242,.95);border:1.5px solid #6e5a45;border-radius:9px;color:#3b3733;font-weight:600;line-height:1.45;text-align:center;pointer-events:auto;box-shadow:inset 3px 0 0 var(--bubble-accent,var(--matcha)),0 2px 0 rgba(58,42,30,.16);animation:bubble-pop .16s ease-out}.haven-bubble.s-spring{--bubble-accent:#d989a5}.haven-bubble.s-summer{--bubble-accent:#5f8e4e}.haven-bubble.s-autumn{--bubble-accent:#c98345}.haven-bubble.s-winter{--bubble-accent:#8fb2c9}.haven-bubble-tail{position:absolute;left:50%;bottom:-4.5px;width:7px;height:7px;background:inherit;border-right:1.5px solid #6e5a45;border-bottom:1.5px solid #6e5a45;border-bottom-right-radius:2px;transform:translateX(-50%) rotate(45deg)}@keyframes bubble-pop{0%{transform:translate(-50%,calc(-100% - 3px)) scale(.85);opacity:0}}@media (prefers-reduced-motion:no-preference){.wk-float{animation:wk-float 2.8s ease-in-out infinite;will-change:transform}}@keyframes wk-float{0%,to{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-2.5px) rotate(1deg)}}