:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-from:#1a1f3a;--bg-to:#2d2d4a;--text:#e8e8f0;--text-dim:#9aa0c5;--accent:#8b9dc3;--bubble-self:#8b9dc32e;--bubble-other:#ffffff0f;--border:#ffffff14;--danger:#f5a7a7;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:16px;font-weight:300;line-height:1.7}html[data-theme=cream-warm]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%;min-height:100vh;margin:0;padding:0}body{color:var(--text);background:var(--bg-from);transition:background 1s}button{font:inherit;color:inherit;border:1px solid var(--border);cursor:pointer;background:0 0;border-radius:999px;padding:.5rem 1.1rem;transition:background .2s,border-color .2s}button:hover:not(:disabled){background:var(--bubble-other);border-color:var(--accent)}button:disabled{opacity:.4;cursor:not-allowed}input,textarea{font:inherit;color:inherit;background:var(--bubble-other);border:1px solid var(--border);border-radius:14px;outline:none;width:100%;padding:.7rem 1rem;transition:border-color .2s}input:focus,textarea:focus{border-color:var(--accent)}a{color:var(--accent);text-decoration:none}*{scrollbar-width:none;-ms-overflow-style:none}::-webkit-scrollbar{background:0 0;width:0;height:0}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.weather-bg{z-index:-1;pointer-events:none;--wind-intensity:1;transition:opacity 1.5s,filter 1.5s;position:fixed;inset:0;overflow:hidden}.weather-sunny,.weather-partlyCloudy,.weather-cloudy{background:linear-gradient(160deg, var(--bg-from), var(--bg-to))}html[data-theme=cream-warm] .weather-sunny,html[data-theme=cream-warm] .weather-partlyCloudy,html[data-theme=cream-warm] .weather-cloudy{background:linear-gradient(160deg,#f5efe6,#efe7d6)}.weather-bg:before,.weather-bg:after{content:"";filter:blur(80px);opacity:.55;border-radius:50%;position:absolute}.weather-sunny:before{background:radial-gradient(circle,#f5cd78 0%,#0000 65%);width:40vw;height:40vw;animation:24s ease-in-out infinite drift-slow;top:-8vw;left:-8vw}.weather-sunny:after{background:radial-gradient(circle,#f5b06d 0%,#0000 70%);width:30vw;height:30vw;animation:30s ease-in-out -12s infinite reverse drift-slow;bottom:-6vw;right:5vw}.weather-partlyCloudy:before{background:radial-gradient(circle,#c8d7eb8c 0%,#0000 65%);width:50vw;height:50vw;animation:18s ease-in-out infinite breathe;top:-12vw;right:-10vw}.weather-partlyCloudy:after{background:radial-gradient(circle,#788caa59 0%,#0000 70%);width:35vw;height:35vw;animation:28s ease-in-out infinite drift-slow;bottom:-5vw;left:-5vw}.weather-cloudy{opacity:.55;filter:saturate(.7)}.weather-cloudy:before{background:radial-gradient(circle,#5a698280 0%,#0000 70%);width:70vw;height:70vw;animation:20s ease-in-out infinite dim-pulse;top:-20vw;left:-15vw}.weather-cloudy:after{background:radial-gradient(circle,#46556e66 0%,#0000 70%);width:30vw;height:30vw;animation:40s linear infinite drift-slow;bottom:10vw;right:-8vw}.weather-rainy{background:repeating-linear-gradient(calc(100deg - var(--wind-intensity) * 10deg), transparent 0px, transparent 18px, #b4c8e638 18px, #b4c8e638 19px, transparent 20px, transparent 40px);animation:rain-fall calc(1.2s / var(--wind-intensity)) linear infinite;background-size:40px 40px}.weather-rainy:before{background:radial-gradient(circle,#3250828c 0%,#0000 70%);width:80vw;height:80vw;animation:22s ease-in-out infinite breathe;top:-30vw;left:-20vw}.weather-stormy{background:repeating-linear-gradient(calc(110deg - var(--wind-intensity) * 20deg), transparent 0px, transparent 10px, #becdeb52 10px, #becdeb52 11px, transparent 12px, transparent 26px);animation:rain-fall calc(.7s / var(--wind-intensity)) linear infinite, storm-shake 3s ease-in-out infinite;background-size:26px 26px}.weather-stormy:before{filter:blur(40px);background:radial-gradient(at 30% 40%,#1e326499 0%,#0000 60%);width:100vw;height:100vh;animation:14s ease-in-out infinite breathe;top:0;left:0}@keyframes drift-slow{0%,to{transform:translate(0)}50%{transform:translate(4vw,-3vw)}}@keyframes breathe{0%,to{opacity:.5;transform:scale(1)}50%{opacity:.7;transform:scale(1.08)}}@keyframes dim-pulse{0%,to{opacity:.45}50%{opacity:.6}}@keyframes rain-fall{0%{background-position:0 0}to{background-position:20px 40px}}@keyframes storm-shake{0%,to{transform:translate(0)}25%{transform:translate(-.3vw)}75%{transform:translate(.3vw)}}@media (prefers-reduced-motion:reduce){.weather-bg,.weather-bg:before,.weather-bg:after{animation:none!important}}.bg-starry{background-color:#0000;background-image:radial-gradient(circle at 20% 80%,#5064b44d,#0000 50%),radial-gradient(circle at 80% 20%,#9664c833,#0000 50%),linear-gradient(160deg,#0a0f2a,#1a1f3a);background-position:0 0,0 0,0 0;background-repeat:repeat,repeat,repeat;background-size:auto,auto,auto;background-attachment:fixed;background-origin:padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box}.bg-starry:before,.bg-starry:after{content:"";background-image:radial-gradient(1.5px 1.5px at 12% 23%,#ffffffe6,#0000),radial-gradient(1px 1px at 35% 67%,#fffc,#0000),radial-gradient(1.5px 1.5px at 58% 42%,#ffffffe6,#0000),radial-gradient(1px 1px at 71% 89%,#ffffffb3,#0000),radial-gradient(1.5px 1.5px at 85% 28%,#ffffffe6,#0000),radial-gradient(1px 1px at 18% 52%,#fff9,#0000),radial-gradient(1.5px 1.5px at 45% 18%,#fffc,#0000),radial-gradient(1px 1px at 92% 63%,#ffffffb3,#0000),radial-gradient(1.2px 1.2px at 28% 8%,#ffffffe6,#0000),radial-gradient(1px 1px at 62% 95%,#fff9,#0000);animation:5s ease-in-out infinite twinkle;position:absolute;inset:0}.bg-starry:after{opacity:.5;animation-delay:-2.5s}.bg-seaside{background:linear-gradient(#2a4a6b 0%,#3a6b8b 50%,#1e3a5f 100%) fixed}.bg-seaside:before{content:"";background:repeating-linear-gradient(90deg,#0000 0 80px,#ffffff08 80px 120px);animation:18s linear infinite wave-drift;position:absolute;inset:0}.bg-seaside:after{content:"";background:radial-gradient(60vw 30vh at 50% 30%,#c8e6f026,#0000);animation:10s ease-in-out infinite breathe;position:absolute;inset:0}.bg-dawn{background:linear-gradient(170deg,#f5c4a8 0%,#fce5c4 40%,#e8d5c2 100%) fixed}.bg-dawn:before{content:"";filter:blur(60px);background:radial-gradient(circle,#ffc88c99,#0000 70%);width:60vw;height:60vw;animation:30s ease-in-out infinite drift-slow;position:absolute;top:-10vw;right:-10vw}.bg-dawn:after{content:"";filter:blur(50px);background:radial-gradient(circle,#ffa08c80,#0000 70%);width:40vw;height:40vw;animation:35s ease-in-out -10s infinite drift-slow;position:absolute;bottom:-5vw;left:-5vw}@keyframes twinkle{0%,to{opacity:.4}50%{opacity:1}}@keyframes wave-drift{0%{background-position:0 0}to{background-position:200px 0}}.splash{min-height:100vh;color:var(--text-dim);letter-spacing:.2em;place-items:center;font-size:.95rem;display:grid}.home-layout,.admin-layout{flex-direction:column;height:100dvh;display:flex;overflow:hidden}.app-header{color:var(--text-dim);z-index:20;-webkit-backdrop-filter:blur(10px);background:color-mix(in srgb, var(--bg-from) 70%, transparent);border-bottom:1px solid var(--border);flex:none;justify-content:space-between;align-items:center;padding:.9rem 1.2rem;font-size:.9rem;display:flex}.app-header .brand{color:var(--text);letter-spacing:.15em;align-items:center;gap:.5rem;font-weight:300;display:flex}.app-header .brand:before{content:"🏮";filter:grayscale(.3)}.app-header nav{gap:.6rem;display:flex}.app-header nav a{color:var(--text-dim);border-radius:999px;padding:.3rem .75rem;transition:background .2s,color .2s}.app-header nav a.active{color:var(--text);background:var(--bubble-other)}.page{flex-direction:column;flex:1;min-height:0;display:flex;overflow-y:auto}.login-wrap{place-items:center;min-height:100vh;padding:2rem 1.2rem;display:grid}.login-card{text-align:center;flex-direction:column;gap:1.2rem;width:100%;max-width:360px;display:flex}.login-card h1{letter-spacing:.3em;color:var(--text);margin:0;font-size:1.4rem;font-weight:200}.login-card p{color:var(--text-dim);margin:0;font-size:.92rem;line-height:1.8}.login-card .err{color:var(--danger);font-size:.88rem}.chat{flex-direction:column;width:100%;max-width:720px;height:100%;min-height:0;margin:0 auto;padding:0 1rem;display:flex}.chat-scroll{flex-direction:column;flex:1;gap:.9rem;padding:1.5rem 0 1rem;display:flex;overflow-y:auto}.bubble{white-space:pre-wrap;word-break:break-word;border-radius:18px;max-width:80%;padding:.75rem 1rem;font-weight:300;line-height:1.7}.bubble.user{background:var(--bubble-self);align-self:flex-end}.bubble.assistant{background:var(--bubble-other);align-self:flex-start}.bubble.opener{color:var(--text-dim);border:1px dashed var(--border);background:0 0;font-style:italic}.bubble-wrap{align-items:flex-end;gap:.4rem;max-width:86%;display:flex;position:relative}.bubble-wrap.user{flex-direction:row-reverse;align-self:flex-end}.bubble-wrap.assistant{align-self:flex-start}.bubble-wrap .bubble{max-width:none}.bubble-actions{opacity:0;gap:.3rem;transition:opacity .2s;display:flex}.bubble-wrap:hover .bubble-actions{opacity:1}.bubble-actions button{color:var(--text-dim);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:.2rem .5rem;font-size:1rem}.bubble-actions button:hover{color:var(--text);background:var(--bubble-other)}.composer{background:linear-gradient(#0000,#00000059);padding:.6rem 0 1.3rem;position:sticky;bottom:0}.composer-modes{color:var(--text-dim);gap:1rem;padding:.3rem .2rem .6rem;font-size:.78rem;display:flex}.composer-modes label{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:.3rem;display:inline-flex}.composer-modes input{width:auto}.composer form{align-items:flex-end;gap:.5rem;display:flex}.composer textarea{resize:none;border-radius:18px;flex:1;min-height:2.6rem;max-height:8rem}.composer button{flex:none}.voice-btn{padding:.5rem .75rem;font-size:1rem}.voice-btn.on{background:var(--danger);border-color:var(--danger);color:#fff;animation:1.2s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.05)}}.letter-notice{border:1px solid var(--accent);color:var(--text);background:linear-gradient(135deg,#f5cd7826,#f5a7a726);border-radius:999px;align-self:center;padding:.7rem 1.2rem;font-size:.92rem;text-decoration:none;transition:transform .2s,box-shadow .2s;box-shadow:0 0 20px #8b9dc333}.letter-notice:hover{transform:translateY(-2px);box-shadow:0 0 30px #8b9dc359}.milestone-notice{color:var(--text);cursor:pointer;background:#f5cd781f;border:1px dashed #f5cd7866;border-radius:999px;align-self:center;padding:.6rem 1.1rem;font-size:.9rem;transition:opacity .3s;animation:.8s ease-out milestone-in}.milestone-notice:hover{opacity:.8}@keyframes milestone-in{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.breathing-overlay{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:50;background:#000000bf;place-items:center;display:grid;position:fixed;inset:0}.breathing-card{text-align:center;flex-direction:column;align-items:center;gap:1.2rem;min-width:280px;padding:2rem;display:flex}.breathing-circle-wrap{place-items:center;width:180px;height:180px;margin:1rem 0;display:grid}.breathing-circle{background:radial-gradient(circle,#8b9dc399,#8b9dc31a);border-radius:50%;width:140px;height:140px;box-shadow:0 0 60px #8b9dc366}.breathing-label{letter-spacing:.2em;color:var(--text);font-size:1.2rem;font-weight:200}.breathing-count{color:var(--accent);font-variant-numeric:tabular-nums;font-size:3rem;font-weight:100}.breathing-cycles{color:var(--text-dim);font-size:.85rem}.crisis-banner{color:var(--text);background:#f5a7a71a;border:1px solid #f5a7a74d;border-radius:16px;margin:.5rem 0;padding:.9rem 1.1rem;font-size:.92rem;line-height:1.7}.crisis-banner strong{color:var(--danger);font-weight:500}.crisis-banner a{color:var(--danger)}.mood-view{width:100%;max-width:680px;margin:0 auto;padding:2rem 1.2rem}.mood-view h2{letter-spacing:.2em;color:var(--text-dim);margin:0 0 2rem;font-size:1.1rem;font-weight:200}.mood-current{text-align:center;padding:2rem 0}.mood-current .emoji{font-size:3rem}.mood-current .phrase{color:var(--text);margin-top:1rem;font-size:1.05rem}.mood-band{border-radius:12px;gap:2px;height:48px;margin:1.5rem 0;display:flex;overflow:hidden}.mood-band .cell{flex:1;transition:opacity .3s}.mood-band .cell.empty{background:var(--bubble-other);opacity:.3}.mood-band .cell.sunny{background:linear-gradient(#f5d07a,#f0b85d)}.mood-band .cell.partlyCloudy{background:linear-gradient(#b6c5d8,#8ba3be)}.mood-band .cell.cloudy{background:linear-gradient(#7d8aa0,#5a6880)}.mood-band .cell.rainy{background:linear-gradient(#4a6da0,#2f4c7a)}.mood-band .cell.stormy{background:linear-gradient(#2a3e6e,#14213d)}.mood-narrative{color:var(--text-dim);text-align:center;margin-top:1rem;font-size:.95rem;line-height:1.8}.mood-footer{border-top:1px solid var(--border);color:var(--text-dim);text-align:center;margin-top:3rem;padding-top:1.5rem;font-size:.82rem;line-height:1.8}.settings{max-width:520px;margin:0 auto;padding:2rem 1.2rem}.settings section{margin-bottom:2rem}.settings h3{letter-spacing:.1em;color:var(--text-dim);margin:0 0 .8rem;font-size:1rem;font-weight:300}.settings .theme-picker{gap:.8rem;display:flex}.settings .theme-picker button{flex:1}.settings .theme-picker button.active{background:var(--bubble-self);border-color:var(--accent)}.llm-slot{background:var(--bubble-other);border:1px solid var(--border);border-radius:14px;flex-direction:column;gap:.7rem;padding:1rem 1.1rem;display:flex}.llm-slot h4{color:var(--text);margin:0 0 .2rem;font-size:.95rem;font-weight:400}.llm-slot .field{flex-direction:column;gap:.35rem;display:flex}.llm-slot .field>span{color:var(--text-dim);letter-spacing:.05em;font-size:.78rem}.llm-slot input{border-radius:10px;padding:.55rem .85rem;font-size:.9rem}.consent-wrap{place-items:center;min-height:100vh;padding:2rem 1.2rem;display:grid}.consent-card{background:var(--bubble-other);border:1px solid var(--border);text-align:center;border-radius:22px;width:100%;max-width:520px;padding:2rem 1.8rem}.consent-card .lantern-emoji{margin-bottom:.6rem;font-size:2.2rem}.consent-card h2{letter-spacing:.2em;margin:0 0 1rem;font-size:1.25rem;font-weight:200}.consent-card p{color:var(--text-dim);margin:0 0 1.5rem;line-height:1.9}.consent-facts{text-align:left;background:var(--bubble-self);color:var(--text);border-radius:14px;flex-direction:column;gap:.6rem;margin-bottom:1.5rem;padding:1rem 1.1rem;font-size:.88rem;line-height:1.8;display:flex}.consent-actions{justify-content:center;display:flex}.consent-actions button{background:var(--bubble-self);border-color:var(--accent);padding:.7rem 1.8rem}.memory-view{width:100%;max-width:620px;margin:0 auto;padding:2rem 1.2rem}.memory-view h2{letter-spacing:.2em;color:var(--text);margin:0 0 .5rem;font-size:1.15rem;font-weight:200}.memory-view .hint{color:var(--text-dim);margin:0 0 2rem;font-size:.88rem;line-height:1.9}.memory-section{margin-bottom:2rem}.memory-section h3{letter-spacing:.15em;color:var(--text-dim);margin:0 0 .8rem;font-size:.95rem;font-weight:300}.memory-card{background:var(--bubble-other);border-radius:14px;padding:1rem 1.1rem;font-size:.95rem;line-height:1.8}.moments-list{flex-direction:column;gap:.7rem;display:flex}.moment-item{background:var(--bubble-other);border-radius:12px;padding:.8rem 1rem;position:relative}.moment-meta{color:var(--text-dim);gap:.6rem;margin-bottom:.3rem;font-size:.78rem;display:flex}.moment-tag{background:var(--bubble-self);border-radius:4px;padding:.1rem .5rem}.moment-summary{font-size:.92rem;line-height:1.7}.moment-forget{color:var(--text-dim);margin-top:.5rem;padding:.3rem .7rem;font-size:.78rem}.moment-forget:hover{color:var(--danger);border-color:var(--danger)}.tools-hub{max-width:620px;margin:0 auto;padding:2rem 1.2rem}.tools-hub h2{letter-spacing:.2em;margin:0 0 .5rem;font-size:1.15rem;font-weight:200}.tools-hub .hint{color:var(--text-dim);margin:0 0 2rem;font-size:.88rem}.tools-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.9rem;display:grid}.tool-card{background:var(--bubble-other);border:1px solid var(--border);border-radius:16px;flex-direction:column;gap:.4rem;padding:1.3rem 1.1rem;transition:border-color .2s,background .2s,transform .2s;display:flex}.tool-card:hover{border-color:var(--accent);transform:translateY(-2px)}.tool-icon{font-size:1.8rem}.tool-label{color:var(--text);font-size:1rem;font-weight:400}.tool-desc{color:var(--text-dim);font-size:.82rem;line-height:1.6}.decouple-view{flex-direction:column;gap:1rem;max-width:620px;margin:0 auto;padding:1.5rem 1.2rem;display:flex}.decouple-view h2{letter-spacing:.2em;margin:0;font-size:1.15rem;font-weight:200}.decouple-view .hint{color:var(--text-dim);margin:0;font-size:.88rem;line-height:1.9}.steps-bar{justify-content:center;gap:.6rem;padding:.3rem 0;display:flex}.steps-bar .step{background:var(--bubble-other);width:34px;height:34px;color:var(--text-dim);border:1px solid var(--border);border-radius:50%;place-items:center;font-size:.88rem;display:grid}.steps-bar .step.active{background:var(--bubble-self);color:var(--text);border-color:var(--accent)}.steps-bar .step.done{background:var(--accent);color:#fff}.decouple-chat{flex-direction:column;gap:.7rem;min-height:200px;max-height:50vh;padding-right:4px;display:flex;overflow-y:auto}.letters-view{max-width:620px;margin:0 auto;padding:2rem 1.2rem}.letters-view h2{letter-spacing:.2em;margin:0 0 .5rem;font-size:1.15rem;font-weight:200}.letters-view .hint{color:var(--text-dim);margin:0 0 1.5rem;font-size:.88rem;line-height:1.9}.letter-overlay{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:50;background:#000000bf;place-items:center;padding:1.5rem;display:grid;position:fixed;inset:0}.letter-paper{color:#3d3a2a;white-space:pre-wrap;background:linear-gradient(160deg,#fdf6e8,#f5e8c8);border-radius:8px;width:100%;max-width:500px;padding:2rem 2.2rem;font-family:PingFang SC,Noto Serif SC,serif;line-height:1.9;box-shadow:0 20px 60px #00000080}.letter-paper .letter-from{color:#7a6f4a;letter-spacing:.1em;margin-bottom:1rem;font-size:.82rem}.letter-paper .letter-content{min-height:120px;font-size:1rem}.letter-paper button{color:#3d3a2a;border-color:#c4b68a;margin-top:1.5rem}.admin-layout .admin-header{border-bottom:1px solid var(--border);z-index:20;-webkit-backdrop-filter:blur(10px);background:color-mix(in srgb, var(--bg-from) 70%, transparent);flex:none;align-items:center;gap:1rem;padding:.9rem 1.2rem;display:flex}.admin-layout .admin-header nav{gap:.6rem;display:flex}.admin-layout .admin-body{flex:1;padding:1.5rem;overflow:auto}.user-list{gap:.6rem;max-width:900px;display:grid}.user-row{background:var(--bubble-other);border-radius:12px;grid-template-columns:1fr 1fr 120px 80px 80px 90px;align-items:center;gap:.8rem;padding:.8rem 1rem;font-size:.92rem;display:grid}.user-row a{color:var(--text)}.user-row .dim{color:var(--text-dim)}.user-row .crisis-dot{background:var(--danger);border-radius:50%;width:8px;height:8px;margin-right:.4rem;display:inline-block}.professional-toggle{color:var(--text-dim);align-items:center;gap:.4rem;margin-bottom:1rem;font-size:.88rem;display:inline-flex}.metric-bars{gap:.5rem;margin:1rem 0;display:grid}.metric-bars .row{grid-template-columns:110px 1fr 30px;align-items:center;gap:.5rem;font-size:.88rem;display:grid}.metric-bars .bar{background:var(--bubble-other);border-radius:6px;height:10px;overflow:hidden}.metric-bars .bar>div{background:var(--accent);border-radius:6px;height:100%;transition:width .3s}.messages-stream{flex-direction:column;gap:.5rem;max-height:480px;margin-top:1.5rem;padding-right:.5rem;display:flex;overflow-y:auto}.messages-stream .msg{background:var(--bubble-other);border-radius:10px;padding:.55rem .8rem;font-size:.88rem;line-height:1.6}.messages-stream .msg.user{background:var(--bubble-self)}.messages-stream .msg .meta{color:var(--text-dim);gap:.8rem;margin-bottom:.3rem;font-size:.76rem;display:flex}.messages-stream .msg.crisis-high .meta:before,.messages-stream .msg.crisis-medium .meta:before{content:"⚠";color:var(--danger)}
