:root{color-scheme:light;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:#f4f3ec;color:#213324}*{box-sizing:border-box}body{margin:0;background:linear-gradient(135deg,#fbfaf4,#eef2e6 43%,#f6f5ef)}button,input{font:inherit}.shell{position:relative;overflow:hidden;min-height:100vh;isolation:isolate}.ambientLayer{position:fixed;inset:0;z-index:0;pointer-events:none;background:linear-gradient(115deg,transparent 0 28%,rgba(255,253,246,.52) 34%,transparent 42%),repeating-linear-gradient(90deg,rgba(48,73,50,.045) 0 1px,transparent 1px 72px),repeating-linear-gradient(0deg,rgba(48,73,50,.035) 0 1px,transparent 1px 72px);background-size:260% 100%,72px 72px,72px 72px;opacity:.78;animation:ambientDrift 18s linear infinite}.chat{z-index:1;grid-template-rows:auto 1fr auto;min-width:0;height:100vh}.chat,.chatBanner{position:relative;display:grid}.chatBanner{grid-template-columns:52px minmax(0,1fr) auto auto;align-items:center;grid-gap:16px;gap:16px;margin:18px auto 0;width:min(1180px,calc(100% - 36px));padding:18px;border:1px solid rgba(255,255,255,.72);border-radius:8px;background:linear-gradient(135deg,rgba(48,73,50,.98),rgba(62,92,65,.94)),#304932;color:#fffdf6;box-shadow:0 22px 60px rgba(48,73,50,.24);overflow:hidden;animation:bannerRise .52s cubic-bezier(.2,.8,.2,1) both}.chatBanner:before{content:"";position:absolute;inset:-60% -20%;background:linear-gradient(105deg,transparent 38%,rgba(255,253,246,.22) 48%,transparent 58%);transform:translateX(-60%);animation:bannerSweep 7s ease-in-out infinite}.chatBanner>*{position:relative;z-index:1}.bannerIcon{display:grid;place-items:center;width:52px;height:52px;border-radius:8px;background:#fffdf6;color:#304932;box-shadow:0 12px 28px rgba(255,253,246,.24);animation:iconFloat 4s ease-in-out infinite}.chatBanner span{display:block;color:#dce7d4;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.chatBanner h1{margin:3px 0 0;font-size:28px;line-height:1.12}.onlineBadge{display:inline-flex;align-items:center;gap:8px;min-height:34px;padding:0 12px;border:1px solid rgba(220,231,212,.9);border-radius:8px;background:rgba(251,250,244,.96);color:#304932;font-size:14px;font-weight:800}.onlineBadge span{width:8px;height:8px;border-radius:50%;background:#4f8f5d;box-shadow:0 0 0 0 rgba(79,143,93,.44);animation:onlinePulse 1.9s ease-out infinite}.logoutButton{display:grid;place-items:center;width:38px;height:38px;border:1px solid rgba(220,231,212,.9);border-radius:8px;background:rgba(251,250,244,.96);color:#304932;cursor:pointer;transition:transform .18s ease,background .18s ease,box-shadow .18s ease}.logoutButton:hover{background:#fffdf6;box-shadow:0 10px 24px rgba(20,38,22,.18);transform:translateY(-1px)}.loginShell{display:grid;place-items:center;padding:24px}.loginPanel{grid-gap:16px;gap:16px;width:min(420px,100%);padding:28px;border:1px solid rgba(85,112,87,.24);background:rgba(255,253,246,.94);box-shadow:0 24px 70px rgba(48,73,50,.16)}.loginIcon,.loginPanel{display:grid;border-radius:8px}.loginIcon{place-items:center;width:58px;height:58px;background:#304932;color:#fffdf6}.loginCopy span{display:block;color:#60745d;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.loginCopy h1{margin:4px 0 0;color:#213324;font-size:26px;line-height:1.15}.loginPanel label{display:grid;grid-gap:7px;gap:7px;color:#3a4c3c;font-size:14px;font-weight:800}.loginPanel input{width:100%;height:48px;padding:0 13px;border:1px solid rgba(85,112,87,.28);border-radius:8px;outline:0;background:#fffdf6}.loginPanel input:focus{border-color:#4f6f52;box-shadow:0 0 0 3px rgba(79,111,82,.16)}.loginPanel button{height:48px;border:0;border-radius:8px;background:#304932;color:#fffdf6;font-weight:800;cursor:pointer;box-shadow:0 12px 26px rgba(48,73,50,.22)}.loginPanel button:disabled{cursor:not-allowed;opacity:.55}.loginPanel>p{margin:0;color:#5f6d5c}.loginError{padding:10px 12px;border:1px solid rgba(145,47,47,.24);border-radius:8px;background:#fff0ed;color:#8f2f2f;font-size:14px;font-weight:700}.messages{width:min(1180px,calc(100% - 36px));margin:0 auto;overflow-y:auto;padding:30px 0}.empty{place-items:center;grid-gap:10px;gap:10px;max-width:560px;margin:15vh auto 0;padding:30px;border:1px solid rgba(85,112,87,.22);background:rgba(255,253,246,.84);text-align:center;box-shadow:0 22px 60px rgba(48,73,50,.1);animation:emptyIn .56s cubic-bezier(.2,.8,.2,1) both}.empty,.emptyIcon{display:grid;border-radius:8px}.emptyIcon{place-items:center;width:64px;height:64px;background:#e9efe1;color:#304932;animation:iconFloat 4.5s ease-in-out infinite}.empty h3{margin:6px 0 0;font-size:24px}.empty p{max-width:390px;margin:0;color:#5f6d5c;line-height:1.5}.message{display:grid;grid-template-columns:36px minmax(0,1fr);grid-gap:10px;gap:10px;max-width:920px;margin:0 0 20px;animation:messageInLeft .36s cubic-bezier(.2,.8,.2,1) both;will-change:transform,opacity}.message.user{margin-left:auto;max-width:680px;grid-template-columns:minmax(0,1fr) 36px;animation-name:messageInRight}.message.user .avatar{grid-column:2;grid-row:1;background:#4f6f52;color:#fffdf6}.message.user .bubble{grid-column:1;grid-row:1;background:#edf3e8;border-color:#c6d8bd}.avatar{position:relative;display:grid;place-items:center;width:36px;height:36px;border-radius:8px;background:#304932;color:#fffdf6;z-index:1;transition:transform .18s ease}.avatar svg{position:relative;z-index:2}.message.speaking .avatar{transform:translateY(-1px)}.message.speaking .avatar:after,.message.speaking .avatar:before{content:"";position:absolute;inset:-7px;border:1px solid rgba(79,111,82,.34);border-radius:10px;opacity:0;animation:speakingWave 1.65s ease-out infinite}.message.speaking .avatar:after{animation-delay:.78s}.bubble{position:relative;padding:15px 17px;border:1px solid rgba(85,112,87,.22);border-radius:8px;background:rgba(255,253,246,.96);box-shadow:0 16px 42px rgba(48,73,50,.1);overflow:hidden}.bubble:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(105deg,transparent 0 42%,rgba(255,255,255,.3) 50%,transparent 58%);transform:translateX(-125%);opacity:0}.message.speaking .bubble{border-color:transparent;background:linear-gradient(rgba(255,253,246,.97),rgba(255,253,246,.97)) padding-box,linear-gradient(120deg,#304932,#dce7d4,#6f8b63,#304932) border-box;background-size:100% 100%,260% 260%;animation:borderFlow 2.4s linear infinite}.message.speaking .bubble:after{opacity:1;animation:bubbleScan 2.2s ease-in-out infinite}.markdown{line-height:1.55}.markdown>:first-child{margin-top:0}.markdown>:last-child{margin-bottom:0}.markdown p{margin:0;white-space:pre-wrap;line-height:1.55}.markdown h1+p,.markdown h2+p,.markdown h3+p,.markdown ol+p,.markdown p+p,.markdown ul+p{margin-top:14px}.markdown h1,.markdown h2,.markdown h3{margin:18px 0 8px;color:#213324;line-height:1.25}.markdown h1{font-size:22px}.markdown h2{font-size:19px}.markdown h3{font-size:17px}.markdown ol,.markdown ul{margin:10px 0;padding-left:22px}.markdown li+li{margin-top:6px}.markdown strong{font-weight:800}.markdown code{padding:2px 5px;border-radius:5px;background:#edf3e8;color:#304932;font-size:.92em}.markdown pre{overflow-x:auto;margin:12px 0;padding:12px;border-radius:8px;background:#304932;color:#fffdf6}.markdown pre code{padding:0;background:transparent;color:inherit}.typingIndicator{display:inline-flex;align-items:center;gap:7px;min-height:24px;padding:2px 0}.typingIndicator span{width:8px;height:8px;border-radius:50%;background:#304932;opacity:.45;animation:typingBounce 1.05s ease-in-out infinite}.typingIndicator span:nth-child(2){animation-delay:.14s}.typingIndicator span:nth-child(3){animation-delay:.28s}.composer{display:grid;grid-template-columns:1fr 50px;grid-gap:10px;gap:10px;width:min(1180px,calc(100% - 36px));margin:0 auto 18px;padding:10px;border:1px solid rgba(85,112,87,.24);border-radius:8px;background:rgba(255,253,246,.88);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);box-shadow:0 20px 54px rgba(48,73,50,.12);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}.composer:focus-within{border-color:rgba(79,111,82,.46);box-shadow:0 24px 70px rgba(48,73,50,.18);transform:translateY(-1px)}.composer input{min-width:0;height:50px;padding:0 16px;border:1px solid transparent;border-radius:8px;outline:0;background:#fffdf6}.composer input:focus{border-color:#4f6f52;box-shadow:0 0 0 3px rgba(79,111,82,.16)}.composer button{display:grid;place-items:center;width:50px;height:50px;border:0;border-radius:8px;background:#304932;color:#fffdf6;cursor:pointer;box-shadow:0 12px 26px rgba(48,73,50,.24);transition:transform .16s ease,box-shadow .16s ease,filter .16s ease}.composer button:not(:disabled):hover{box-shadow:0 16px 34px rgba(48,73,50,.3);filter:brightness(1.06);transform:translateY(-1px) scale(1.02)}.composer button:not(:disabled):active{transform:translateY(0) scale(.98)}.composer button:disabled{cursor:not-allowed;opacity:.55}@media (max-width:720px){.chatBanner{grid-template-columns:44px 1fr;width:calc(100% - 24px);margin-top:12px;padding:14px}.bannerIcon{width:44px;height:44px}.chatBanner h1{font-size:21px}.onlineBadge{justify-self:start}.logoutButton{justify-self:end}.composer,.messages{width:calc(100% - 24px)}.messages{padding:20px 0}.message,.message.user{max-width:100%}}@keyframes ambientDrift{0%{background-position:-120% 0,0 0,0 0}to{background-position:180% 0,72px 0,0 72px}}@keyframes bannerRise{0%{opacity:0;transform:translateY(-12px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes bannerSweep{0%,52%{transform:translateX(-68%)}78%,to{transform:translateX(68%)}}@keyframes iconFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes onlinePulse{0%{box-shadow:0 0 0 0 rgba(79,143,93,.44)}70%,to{box-shadow:0 0 0 8px rgba(79,143,93,0)}}@keyframes emptyIn{0%{opacity:0;transform:translateY(12px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes messageInLeft{0%{opacity:0;transform:translateX(-18px) translateY(8px) scale(.98)}to{opacity:1;transform:translateX(0) translateY(0) scale(1)}}@keyframes messageInRight{0%{opacity:0;transform:translateX(18px) translateY(8px) scale(.98)}to{opacity:1;transform:translateX(0) translateY(0) scale(1)}}@keyframes speakingWave{0%{opacity:.62;transform:scale(.82)}to{opacity:0;transform:scale(1.55)}}@keyframes borderFlow{0%{background-position:0 0,0 50%}to{background-position:0 0,260% 50%}}@keyframes bubbleScan{0%{transform:translateX(-125%)}58%,to{transform:translateX(125%)}}@keyframes typingBounce{0%,80%,to{opacity:.38;transform:translateY(0) scale(.92)}40%{opacity:1;transform:translateY(-5px) scale(1.05)}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}