:root{color-scheme:light;--bg: #f5f6f8;--bg-soft: #eef1f4;--surface: rgba(255, 255, 255, .84);--surface-solid: #ffffff;--surface-strong: #fbfcfd;--line: rgba(20, 24, 31, .09);--line-strong: rgba(20, 24, 31, .14);--text: #151922;--text-2: #5d6673;--text-3: #8a92a0;--primary: #161c24;--primary-2: #2a313b;--primary-ink: #fbfcff;--accent: #c9774f;--accent-soft: rgba(201, 119, 79, .16);--accent-glow: rgba(214, 128, 88, .28);--wechat: #1aad19;--alipay: #1677ff;--shadow-lg: 0 30px 70px rgba(20, 24, 31, .08);--shadow-md: 0 20px 48px rgba(20, 24, 31, .06);--shadow-sm: 0 12px 26px rgba(20, 24, 31, .05);--radius-xl: 32px;--radius-lg: 24px;--radius-md: 18px;--radius-sm: 14px;--font-sans: "Geist", "SF Pro Display", "PingFang SC", "Noto Sans SC", "Microsoft YaHei", system-ui, sans-serif}html,body{margin:0;min-height:100%;font-family:var(--font-sans);background:radial-gradient(circle at 12% 14%,rgba(201,119,79,.08),transparent 22%),radial-gradient(circle at 86% 18%,rgba(123,136,155,.1),transparent 20%),linear-gradient(180deg,#fafbfc,#f3f5f7);color:var(--text)}body{min-height:100vh;overflow-x:hidden}a,button,input{font:inherit}button{border:0;background:none;padding:0;cursor:pointer}.login-page{position:relative;min-height:100vh;padding:28px;display:grid;place-items:center;isolation:isolate}.login-page:before,.login-page:after{content:"";position:absolute;inset:auto;border-radius:999px;filter:blur(40px);pointer-events:none;z-index:0}.login-page:before{width:28rem;height:28rem;left:-6rem;top:2rem;background:#d8b9a22e}.login-page:after{width:26rem;height:26rem;right:-4rem;bottom:0;background:#b3c0d129}.login-grid{position:relative;z-index:1;width:min(1280px,100%);display:grid;grid-template-columns:minmax(0,1.16fr) minmax(380px,440px);gap:22px;align-items:stretch}.panel{position:relative;border:1px solid rgba(255,255,255,.74);background:linear-gradient(180deg,#ffffffe6,#fafbfcbf);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);box-shadow:var(--shadow-lg);overflow:hidden}.panel:after{content:"";position:absolute;inset:0;border:1px solid var(--line);border-radius:inherit;pointer-events:none}.brand-panel{border-radius:36px;min-height:720px;padding:18px;background:linear-gradient(180deg,#07080af5,#0c0c0efa)}.brand-panel:before{content:"";position:absolute;inset:18px;border-radius:28px;border:1px solid rgba(255,255,255,.08);background:linear-gradient(180deg,#ffffff0f,#ffffff03);pointer-events:none;z-index:1}.brand-visual{position:relative;width:100%;height:100%;min-height:680px;border-radius:30px;overflow:hidden;isolation:isolate;background:#000}.evil-eye-container{width:100%;height:100%}.evil-eye-container canvas{display:block;width:100%;height:100%}.login-panel{border-radius:32px;min-height:720px;padding:26px;display:flex;align-items:center;justify-content:center}.login-card{position:relative;width:100%;max-width:388px;padding:30px;border-radius:28px;background:#ffffffd1;border:1px solid rgba(20,24,31,.08);box-shadow:var(--shadow-md)}.login-card:before{content:"";position:absolute;inset:1px;border-radius:27px;border:1px solid rgba(255,255,255,.74);pointer-events:none}.login-head{display:grid;gap:8px}.login-head h2{margin:0;font-size:26px;line-height:1.1;letter-spacing:-.04em;font-weight:600}.login-head p{margin:0;color:var(--text-2);font-size:14px;line-height:1.65}.login-tabs{margin-top:22px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:6px;border-radius:18px;background:#f2f4f7eb;border:1px solid rgba(20,24,31,.06)}.login-tab{position:relative;min-height:42px;border-radius:14px;color:var(--text-2);font-size:14px;font-weight:500;transition:color .18s ease,transform .18s ease,box-shadow .18s ease,background-color .18s ease}.login-tab[aria-selected=true]{color:var(--text);background:#fffffff5;box-shadow:0 10px 20px #14181f0f}.login-tab:hover{transform:translateY(-1px)}.login-forms{margin-top:18px}.login-form{display:none;gap:12px}.login-form.is-active{display:grid}.phone-code-row{display:grid;grid-template-columns:minmax(0,1fr) 112px;gap:10px}.code-button{min-height:68px;border-radius:18px;border:1px solid rgba(20,24,31,.1);background:#ffffffe6;color:var(--text);font-size:13px;font-weight:600}.login-error,.channel-note{margin:12px 0 0;color:#b42318;font-size:12px;line-height:1.5}.channel-note{margin:0;color:var(--text-3)}button:disabled{cursor:not-allowed;opacity:.48;transform:none!important}.dev-login-link{display:block;margin:14px auto 0;color:var(--text-3);font-size:12px;text-decoration:underline;text-underline-offset:3px}.field{position:relative;display:grid;gap:8px;padding:14px 16px 12px;border-radius:18px;border:1px solid rgba(20,24,31,.08);background:#ffffffe0;box-shadow:inset 0 1px #ffffffd1;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease;overflow:hidden}.field:focus-within{transform:translateY(-1px);border-color:#14181f29;box-shadow:inset 0 1px #ffffffd6,0 12px 24px #14181f0d}.field:after{content:"";position:absolute;left:14px;right:14px;bottom:0;height:2px;border-radius:999px;background:linear-gradient(90deg,#c9774f00,#c9774f9e,#1519225c,#c9774f00);opacity:0;transform:translate(-12%);transition:opacity .18s ease}.field:focus-within:after{opacity:1;animation:fieldScan 1.45s ease-in-out infinite}.field-label{font-size:12px;color:var(--text-3);letter-spacing:.06em}.field input{width:100%;border:0;outline:none;padding:0;background:transparent;color:var(--text);font-size:15px;line-height:1.4}.field input::-moz-placeholder{color:#a0a8b5}.field input::placeholder{color:#a0a8b5}.assist-row{margin-top:12px;display:flex;align-items:center;justify-content:space-between;gap:12px;color:var(--text-2);font-size:12px}.assist-row span{display:inline-flex;align-items:center;gap:8px}.assist-row span:before{content:"";width:8px;height:8px;border-radius:50%;background:linear-gradient(135deg,#151922eb,#c9774fb8);box-shadow:0 0 0 5px #c9774f14}.cta-button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:54px;margin-top:18px;border-radius:18px;color:var(--primary-ink);text-decoration:none;background:linear-gradient(135deg,#171d26,#242c35 48%,#1e242d);box-shadow:0 20px 34px #14181f29,inset 0 1px #ffffff24;overflow:hidden;transition:transform .18s ease,box-shadow .18s ease,filter .18s ease}.cta-button:before{content:"";position:absolute;inset:1px;border-radius:17px;border:1px solid rgba(255,255,255,.12);pointer-events:none}.cta-button:after{content:"";position:absolute;inset:-30% auto -30% -24%;width:42%;background:linear-gradient(90deg,#fff0,#ffffff4d,#fff0);transform:rotate(16deg) translate(-120%);transition:transform .52s ease}.cta-button:hover{transform:translateY(-2px);box-shadow:0 26px 38px #14181f2e,inset 0 1px #ffffff29;filter:saturate(1.04)}.cta-button:hover:after{transform:rotate(16deg) translate(310%)}.cta-button:active{transform:translateY(0);box-shadow:0 12px 24px #14181f24,inset 0 1px #ffffff1f}.cta-button .cta-ripple{position:absolute;inset:auto auto 50% 50%;width:10px;height:10px;border-radius:50%;background:#ffffff38;opacity:0;transform:translate(-50%,-50%) scale(1);pointer-events:none}.cta-button:active .cta-ripple{animation:ctaRipple .52s ease-out}.divider{display:flex;align-items:center;gap:12px;margin:20px 0 16px;color:var(--text-3);font-size:12px}.divider:before,.divider:after{content:"";flex:1;height:1px;background:linear-gradient(90deg,#14181f00,#14181f1f,#14181f00)}.quick-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.quick-button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:50px;border-radius:16px;border:1px solid rgba(20,24,31,.08);background:linear-gradient(180deg,#fffffff0,#f5f7fae6);color:var(--text);box-shadow:var(--shadow-sm);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;overflow:hidden}.quick-button:before{content:"";position:absolute;inset:auto -32% 0 auto;width:56%;height:120%;background:linear-gradient(180deg,#fff0,#ffffff75,#fff0);transform:rotate(18deg) translate(56%);transition:transform .36s ease}.quick-button:hover{transform:translateY(-2px);border-color:#14181f1f;box-shadow:0 16px 28px #14181f14}.quick-button:hover:before{transform:rotate(18deg) translate(-14%)}.quick-button:active{transform:translateY(0)}.quick-icon{position:relative;width:20px;height:20px;display:inline-block;flex:0 0 auto}.quick-icon.wechat{border-radius:50%;background:var(--wechat);box-shadow:0 8px 16px #1aad1933}.quick-icon.wechat:before,.quick-icon.wechat:after{content:"";position:absolute;background:#fff;border-radius:50%}.quick-icon.wechat:before{width:9px;height:7px;left:3px;top:5px}.quick-icon.wechat:after{width:8px;height:6px;right:2px;bottom:5px}.quick-icon.alipay{border-radius:6px;background:linear-gradient(135deg,#0d7eff,#41a0ff);box-shadow:0 8px 16px #1677ff33}.quick-icon.alipay:before,.quick-icon.alipay:after{content:"";position:absolute;background:#fff;border-radius:999px}.quick-icon.alipay:before{width:12px;height:2px;left:4px;top:6px;transform:rotate(-18deg)}.quick-icon.alipay:after{width:12px;height:2px;left:4px;bottom:6px;transform:rotate(18deg)}.quick-label{font-size:14px;font-weight:500}.footnote{margin-top:16px;color:var(--text-3);font-size:12px;line-height:1.65;text-align:center}@keyframes auraDrift{0%{transform:scale(.96) translateY(-8px)}to{transform:scale(1.04) translateY(8px)}}@keyframes grainMove{0%{transform:translateZ(0) rotate(0)}to{transform:translate3d(3%,-2%,0) rotate(12deg)}}@keyframes flareFloat{0%{transform:translate3d(-2%,1%,0) scale(.98)}to{transform:translate3d(2%,-2%,0) scale(1.04)}}@keyframes ringPulse{0%,to{transform:scale(.98);opacity:.72}50%{transform:scale(1.03);opacity:.9}}@keyframes irisBreath{0%,to{transform:scale(.985)}50%{transform:scale(1.018)}}@keyframes irisSpin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes fieldScan{0%{transform:translate(-12%)}to{transform:translate(12%)}}@keyframes ctaRipple{0%{opacity:.55;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(-50%,-50%) scale(18)}}@media(max-width:1080px){.login-grid{grid-template-columns:minmax(0,1fr)}.brand-panel,.login-panel{min-height:auto}.brand-panel{padding:18px}.brand-visual{min-height:420px}.login-panel{padding:22px}.login-card{max-width:none}}@media(max-width:720px){.login-page{padding:16px}.brand-panel,.login-panel{border-radius:28px}.brand-panel{padding:14px}.login-panel{padding:16px}.login-card{padding:22px 18px;border-radius:24px}.brand-visual{min-height:300px}.quick-actions{grid-template-columns:minmax(0,1fr)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.cta-button:after,.quick-button:before{display:none}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@theme inline{--animation-delay-0: 0s; --animation-delay-75: 75ms; --animation-delay-100: .1s; --animation-delay-150: .15s; --animation-delay-200: .2s; --animation-delay-300: .3s; --animation-delay-500: .5s; --animation-delay-700: .7s; --animation-delay-1000: 1s; --animation-repeat-0: 0; --animation-repeat-1: 1; --animation-repeat-infinite: infinite; --animation-direction-normal: normal; --animation-direction-reverse: reverse; --animation-direction-alternate: alternate; --animation-direction-alternate-reverse: alternate-reverse; --animation-fill-mode-none: none; --animation-fill-mode-forwards: forwards; --animation-fill-mode-backwards: backwards; --animation-fill-mode-both: both; --percentage-0: 0; --percentage-5: .05; --percentage-10: .1; --percentage-15: .15; --percentage-20: .2; --percentage-25: .25; --percentage-30: .3; --percentage-35: .35; --percentage-40: .4; --percentage-45: .45; --percentage-50: .5; --percentage-55: .55; --percentage-60: .6; --percentage-65: .65; --percentage-70: .7; --percentage-75: .75; --percentage-80: .8; --percentage-85: .85; --percentage-90: .9; --percentage-95: .95; --percentage-100: 1; --percentage-translate-full: 1; --animate-in: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-out: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); @keyframes enter { from { opacity: var(--tw-enter-opacity,1); transform: translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0)); filter: blur(var(--tw-enter-blur,0)); }}@keyframes exit { to { opacity: var(--tw-exit-opacity,1); transform: translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0)); filter: blur(var(--tw-exit-blur,0)); }}--animate-accordion-down: accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-accordion-up: accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-collapsible-down: collapsible-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-collapsible-up: collapsible-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); @keyframes accordion-down { from { height: 0; }to { height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto))))); }}@keyframes accordion-up { from { height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto))))); }to { height: 0; }}@keyframes collapsible-down { from { height: 0; }to { height: var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto)))); }}@keyframes collapsible-up { from { height: var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto)))); }to { height: 0; }}--animate-caret-blink: caret-blink 1.25s ease-out infinite; @keyframes caret-blink { 0%,70%,100% { opacity: 1; }20%,50% { opacity: 0; }}}@utility animation-duration-*{--tw-animation-duration: calc(--value(number)*1ms) ; --tw-animation-duration: --value(--animation-duration-*,[duration],"initial",[*]); animation-duration: calc(--value(number)*1ms) ; animation-duration: --value(--animation-duration-*,[duration],"initial",[*]);}@utility delay-*{animation-delay: calc(--value(number)*1ms) ; animation-delay: --value(--animation-delay-*,[duration],"initial",[*]); --tw-animation-delay: calc(--value(number)*1ms) ; --tw-animation-delay: --value(--animation-delay-*,[duration],"initial",[*]);}@utility repeat-*{animation-iteration-count: --value(--animation-repeat-*,number,"initial",[*]); --tw-animation-iteration-count: --value(--animation-repeat-*,number,"initial",[*]);}@utility direction-*{animation-direction: --value(--animation-direction-*,"initial",[*]); --tw-animation-direction: --value(--animation-direction-*,"initial",[*]);}@utility fill-mode-*{animation-fill-mode: --value(--animation-fill-mode-*,"initial",[*]); --tw-animation-fill-mode: --value(--animation-fill-mode-*,"initial",[*]);}@utility running{animation-play-state: running;}@utility paused{animation-play-state: paused;}@utility play-state-*{animation-play-state: --value("initial",[*]);}@utility blur-in{--tw-enter-blur: 20px;}@utility blur-in-*{--tw-enter-blur: calc(--value(number)*1px) ; --tw-enter-blur: --value(--blur-*,[*]);}@utility blur-out{--tw-exit-blur: 20px;}@utility blur-out-*{--tw-exit-blur: calc(--value(number)*1px) ; --tw-exit-blur: --value(--blur-*,[*]);}@utility fade-in{--tw-enter-opacity: 0;}@utility fade-in-*{--tw-enter-opacity: calc(--value(number)*.01) ; --tw-enter-opacity: --value(--percentage-*,[*]);}@utility fade-out{--tw-exit-opacity: 0;}@utility fade-out-*{--tw-exit-opacity: calc(--value(number)*.01) ; --tw-exit-opacity: --value(--percentage-*,[*]);}@utility zoom-in{--tw-enter-scale: 0;}@utility zoom-in-*{--tw-enter-scale: calc(--value(number)*1%) ; --tw-enter-scale: --value(ratio) ; --tw-enter-scale: --value(--percentage-*,[*]);}@utility -zoom-in-*{--tw-enter-scale: calc(--value(number)*-1%) ; --tw-enter-scale: calc(--value(ratio)*-1) ; --tw-enter-scale: --value(--percentage-*,[*]);}@utility zoom-out{--tw-exit-scale: 0;}@utility zoom-out-*{--tw-exit-scale: calc(--value(number)*1%) ; --tw-exit-scale: --value(ratio) ; --tw-exit-scale: --value(--percentage-*,[*]);}@utility -zoom-out-*{--tw-exit-scale: calc(--value(number)*-1%) ; --tw-exit-scale: calc(--value(ratio)*-1) ; --tw-exit-scale: --value(--percentage-*,[*]);}@utility spin-in{--tw-enter-rotate: 30deg;}@utility spin-in-*{--tw-enter-rotate: calc(--value(number)*1deg) ; --tw-enter-rotate: calc(--value(ratio)*360deg) ; --tw-enter-rotate: --value(--rotate-*,[*]);}@utility -spin-in{--tw-enter-rotate: -30deg;}@utility -spin-in-*{--tw-enter-rotate: calc(--value(number)*-1deg) ; --tw-enter-rotate: calc(--value(ratio)*-360deg) ; --tw-enter-rotate: --value(--rotate-*,[*]);}@utility spin-out{--tw-exit-rotate: 30deg;}@utility spin-out-*{--tw-exit-rotate: calc(--value(number)*1deg) ; --tw-exit-rotate: calc(--value(ratio)*360deg) ; --tw-exit-rotate: --value(--rotate-*,[*]);}@utility -spin-out{--tw-exit-rotate: -30deg;}@utility -spin-out-*{--tw-exit-rotate: calc(--value(number)*-1deg) ; --tw-exit-rotate: calc(--value(ratio)*-360deg) ; --tw-exit-rotate: --value(--rotate-*,[*]);}@utility slide-in-from-top{--tw-enter-translate-y: -100%;}@utility slide-in-from-top-*{--tw-enter-translate-y: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*-100%) ; --tw-enter-translate-y: calc(--value(ratio)*-100%) ; --tw-enter-translate-y: calc(--value(--translate-*,[percentage],[length])*-1) ;}@utility slide-in-from-bottom{--tw-enter-translate-y: 100%;}@utility slide-in-from-bottom-*{--tw-enter-translate-y: calc(--value(integer)*var(--spacing)); --tw-enter-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*100%) ; --tw-enter-translate-y: calc(--value(ratio)*100%) ; --tw-enter-translate-y: --value(--translate-*,[percentage],[length]);}@utility slide-in-from-left{--tw-enter-translate-x: -100%;}@utility slide-in-from-left-*{--tw-enter-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%) ; --tw-enter-translate-x: calc(--value(ratio)*-100%) ; --tw-enter-translate-x: calc(--value(--translate-*,[percentage],[length])*-1) ;}@utility slide-in-from-right{--tw-enter-translate-x: 100%;}@utility slide-in-from-right-*{--tw-enter-translate-x: calc(--value(integer)*var(--spacing)); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%) ; --tw-enter-translate-x: calc(--value(ratio)*100%) ; --tw-enter-translate-x: --value(--translate-*,[percentage],[length]);}@utility slide-in-from-start{&:dir(ltr){ --tw-enter-translate-x: -100%; }&:dir(rtl){ --tw-enter-translate-x: 100%; }}@utility slide-in-from-start-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%) ; --tw-enter-translate-x: calc(--value(ratio)*-100%) ; --tw-enter-translate-x: calc(--value(--translate-*,[percentage],[length])*-1) ; }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%) ; --tw-enter-translate-x: calc(--value(ratio)*100%) ; --tw-enter-translate-x: --value(--translate-*,[percentage],[length]); }}@utility slide-in-from-end{&:dir(ltr){ --tw-enter-translate-x: 100%; }&:dir(rtl){ --tw-enter-translate-x: -100%; }}@utility slide-in-from-end-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%) ; --tw-enter-translate-x: calc(--value(ratio)*100%) ; --tw-enter-translate-x: --value(--translate-*,[percentage],[length]); }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%) ; --tw-enter-translate-x: calc(--value(ratio)*-100%) ; --tw-enter-translate-x: calc(--value(--translate-*,[percentage],[length])*-1) ; }}@utility slide-out-to-top{--tw-exit-translate-y: -100%;}@utility slide-out-to-top-*{--tw-exit-translate-y: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*-100%) ; --tw-exit-translate-y: calc(--value(ratio)*-100%) ; --tw-exit-translate-y: calc(--value(--translate-*,[percentage],[length])*-1) ;}@utility slide-out-to-bottom{--tw-exit-translate-y: 100%;}@utility slide-out-to-bottom-*{--tw-exit-translate-y: calc(--value(integer)*var(--spacing)); --tw-exit-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*100%) ; --tw-exit-translate-y: calc(--value(ratio)*100%) ; --tw-exit-translate-y: --value(--translate-*,[percentage],[length]);}@utility slide-out-to-left{--tw-exit-translate-x: -100%;}@utility slide-out-to-left-*{--tw-exit-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%) ; --tw-exit-translate-x: calc(--value(ratio)*-100%) ; --tw-exit-translate-x: calc(--value(--translate-*,[percentage],[length])*-1) ;}@utility slide-out-to-right{--tw-exit-translate-x: 100%;}@utility slide-out-to-right-*{--tw-exit-translate-x: calc(--value(integer)*var(--spacing)); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%) ; --tw-exit-translate-x: calc(--value(ratio)*100%) ; --tw-exit-translate-x: --value(--translate-*,[percentage],[length]);}@utility slide-out-to-start{&:dir(ltr){ --tw-exit-translate-x: -100%; }&:dir(rtl){ --tw-exit-translate-x: 100%; }}@utility slide-out-to-start-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%) ; --tw-exit-translate-x: calc(--value(ratio)*-100%) ; --tw-exit-translate-x: calc(--value(--translate-*,[percentage],[length])*-1) ; }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%) ; --tw-exit-translate-x: calc(--value(ratio)*100%) ; --tw-exit-translate-x: --value(--translate-*,[percentage],[length]); }}@utility slide-out-to-end{&:dir(ltr){ --tw-exit-translate-x: 100%; }&:dir(rtl){ --tw-exit-translate-x: -100%; }}@utility slide-out-to-end-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%) ; --tw-exit-translate-x: calc(--value(ratio)*100%) ; --tw-exit-translate-x: --value(--translate-*,[percentage],[length]); }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%) ; --tw-exit-translate-x: calc(--value(ratio)*-100%) ; --tw-exit-translate-x: calc(--value(--translate-*,[percentage],[length])*-1) ; }}@theme inline{@keyframes accordion-down {from {height: 0;} to {height: var( --radix-accordion-content-height, var(--accordion-panel-height, auto) );}} @keyframes accordion-up {from {height: var( --radix-accordion-content-height, var(--accordion-panel-height, auto) );} to {height: 0;}}}@custom-variant data-open{&:where([data-state="open"]),&:where([data-open]:not([data-open="false"])) {@slot;}}@custom-variant data-closed{&:where([data-state="closed"]),&:where([data-closed]:not([data-closed="false"])) {@slot;}}@custom-variant data-checked{&:where([data-state="checked"]),&:where([data-checked]:not([data-checked="false"])) {@slot;}}@custom-variant data-unchecked{&:where([data-state="unchecked"]),&:where([data-unchecked]:not([data-unchecked="false"])) {@slot;}}@custom-variant data-selected{&:where([data-selected="true"]) {@slot;}}@custom-variant data-disabled{&:where([data-disabled="true"]),&:where([data-disabled]:not([data-disabled="false"])) {@slot;}}@custom-variant data-active{&:where([data-state="active"]),&:where([data-active]:not([data-active="false"])) {@slot;}}@custom-variant data-horizontal{&:where([data-orientation="horizontal"]) {@slot;}}@custom-variant data-vertical{&:where([data-orientation="vertical"]) {@slot;}}@utility no-scrollbar{-ms-overflow-style: none; scrollbar-width: none; &::-webkit-scrollbar {display: none;}}@property --scroll-fade-t{syntax: "<length-percentage>"; inherits: false; initial-value: 0px;}@property --scroll-fade-b{syntax: "<length-percentage>"; inherits: false; initial-value: 0px;}@property --scroll-fade-s{syntax: "<length-percentage>"; inherits: false; initial-value: 0px;}@property --scroll-fade-e{syntax: "<length-percentage>"; inherits: false; initial-value: 0px;}@property --scroll-fade-mask{syntax: "*"; inherits: false;}@theme inline{@keyframes scroll-fade-reveal-t {from { --scroll-fade-t: 0px; } to { --scroll-fade-t: var(--_scroll-fade-size-t, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))); }} @keyframes scroll-fade-reveal-b {from { --scroll-fade-b: var(--_scroll-fade-size-b, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))); } to { --scroll-fade-b: 0px; }} @keyframes scroll-fade-reveal-s {from { --scroll-fade-s: 0px; } to { --scroll-fade-s: var(--_scroll-fade-size-s, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))); }} @keyframes scroll-fade-reveal-e {from { --scroll-fade-e: var(--_scroll-fade-size-e, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))); } to { --scroll-fade-e: 0px; }}}@utility scroll-fade{ --_scroll-fade-size-t: var( --scroll-fade-t-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --_scroll-fade-size-b: var( --scroll-fade-b-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --scroll-fade-block: linear-gradient( to bottom, transparent 0, #000 var(--scroll-fade-t, 0px), #000 calc(100% - var(--scroll-fade-b, 0px)), transparent 100% ); -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block)); mask-image: var(--scroll-fade-mask, var(--scroll-fade-block)); -webkit-mask-composite: source-in; mask-composite: intersect; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; @supports (animation-timeline: scroll()) { animation: scroll-fade-reveal-t 1ms ease-in-out, scroll-fade-reveal-b 1ms ease-in-out; animation-timeline: scroll(self y), scroll(self y); animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)), calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%; animation-fill-mode: both; } @supports not (animation-timeline: scroll()) { --scroll-fade-t: var(--_scroll-fade-size-t); --scroll-fade-b: var(--_scroll-fade-size-b); } }@utility scroll-fade-y{ --_scroll-fade-size-t: var( --scroll-fade-t-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --_scroll-fade-size-b: var( --scroll-fade-b-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --scroll-fade-block: linear-gradient( to bottom, transparent 0, #000 var(--scroll-fade-t, 0px), #000 calc(100% - var(--scroll-fade-b, 0px)), transparent 100% ); -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block)); mask-image: var(--scroll-fade-mask, var(--scroll-fade-block)); -webkit-mask-composite: source-in; mask-composite: intersect; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; @supports (animation-timeline: scroll()) { animation: scroll-fade-reveal-t 1ms ease-in-out, scroll-fade-reveal-b 1ms ease-in-out; animation-timeline: scroll(self y), scroll(self y); animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)), calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%; animation-fill-mode: both; } @supports not (animation-timeline: scroll()) { --scroll-fade-t: var(--_scroll-fade-size-t); --scroll-fade-b: var(--_scroll-fade-size-b); } }@utility scroll-fade-x{ --_scroll-fade-size-s: var( --scroll-fade-s-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --_scroll-fade-size-e: var( --scroll-fade-e-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --scroll-fade-inline: linear-gradient( to right, transparent 0, #000 var(--scroll-fade-s, 0px), #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100% ); &:where([dir="rtl"], [dir="rtl"] *) { --scroll-fade-inline: linear-gradient( to left, transparent 0, #000 var(--scroll-fade-s, 0px), #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100% ); } -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline)); mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline)); -webkit-mask-composite: source-in; mask-composite: intersect; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; @supports (animation-timeline: scroll()) { animation: scroll-fade-reveal-s 1ms ease-in-out, scroll-fade-reveal-e 1ms ease-in-out; animation-timeline: scroll(self inline), scroll(self inline); animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)), calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%; animation-fill-mode: both; } @supports not (animation-timeline: scroll()) { --scroll-fade-s: var(--_scroll-fade-size-s); --scroll-fade-e: var(--_scroll-fade-size-e); } }@utility scroll-fade-t{ --_scroll-fade-size-t: var( --scroll-fade-t-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --scroll-fade-mask: linear-gradient( to bottom, transparent 0, #000 var(--scroll-fade-t, 0px), #000 100% ); -webkit-mask-image: var(--scroll-fade-mask); mask-image: var(--scroll-fade-mask); -webkit-mask-composite: source-in; mask-composite: intersect; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; @supports (animation-timeline: scroll()) { animation: scroll-fade-reveal-t 1ms ease-in-out; animation-timeline: scroll(self y); animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)); animation-fill-mode: both; } @supports not (animation-timeline: scroll()) { --scroll-fade-t: var(--_scroll-fade-size-t); } }@utility scroll-fade-b{ --_scroll-fade-size-b: var( --scroll-fade-b-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --scroll-fade-mask: linear-gradient( to bottom, #000 0, #000 calc(100% - var(--scroll-fade-b, 0px)), transparent 100% ); -webkit-mask-image: var(--scroll-fade-mask); mask-image: var(--scroll-fade-mask); -webkit-mask-composite: source-in; mask-composite: intersect; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; @supports (animation-timeline: scroll()) { animation: scroll-fade-reveal-b 1ms ease-in-out; animation-timeline: scroll(self y); animation-range: calc( 100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24)) ) 100%; animation-fill-mode: both; } @supports not (animation-timeline: scroll()) { --scroll-fade-b: var(--_scroll-fade-size-b); } }@utility scroll-fade-l{ --_scroll-fade-size-s: var( --scroll-fade-s-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --scroll-fade-mask: linear-gradient( to right, transparent 0, #000 var(--scroll-fade-s, 0px), #000 100% ); -webkit-mask-image: var(--scroll-fade-mask); mask-image: var(--scroll-fade-mask); -webkit-mask-composite: source-in; mask-composite: intersect; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; @supports (animation-timeline: scroll()) { animation: scroll-fade-reveal-s 1ms ease-in-out; animation-timeline: scroll(self x); animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)); animation-fill-mode: both; } @supports not (animation-timeline: scroll()) { --scroll-fade-s: var(--_scroll-fade-size-s); } }@utility scroll-fade-r{ --_scroll-fade-size-e: var( --scroll-fade-e-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --scroll-fade-mask: linear-gradient( to right, #000 0, #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100% ); -webkit-mask-image: var(--scroll-fade-mask); mask-image: var(--scroll-fade-mask); -webkit-mask-composite: source-in; mask-composite: intersect; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; @supports (animation-timeline: scroll()) { animation: scroll-fade-reveal-e 1ms ease-in-out; animation-timeline: scroll(self x); animation-range: calc( 100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24)) ) 100%; animation-fill-mode: both; } @supports not (animation-timeline: scroll()) { --scroll-fade-e: var(--_scroll-fade-size-e); } }@utility scroll-fade-s{ --_scroll-fade-size-s: var( --scroll-fade-s-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --scroll-fade-mask: linear-gradient( to right, transparent 0, #000 var(--scroll-fade-s, 0px), #000 100% ); &:where([dir="rtl"], [dir="rtl"] *) { --scroll-fade-mask: linear-gradient( to left, transparent 0, #000 var(--scroll-fade-s, 0px), #000 100% ); } -webkit-mask-image: var(--scroll-fade-mask); mask-image: var(--scroll-fade-mask); -webkit-mask-composite: source-in; mask-composite: intersect; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; @supports (animation-timeline: scroll()) { animation: scroll-fade-reveal-s 1ms ease-in-out; animation-timeline: scroll(self inline); animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)); animation-fill-mode: both; } @supports not (animation-timeline: scroll()) { --scroll-fade-s: var(--_scroll-fade-size-s); } }@utility scroll-fade-e{ --_scroll-fade-size-e: var( --scroll-fade-e-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))) ); --scroll-fade-mask: linear-gradient( to right, #000 0, #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100% ); &:where([dir="rtl"], [dir="rtl"] *) { --scroll-fade-mask: linear-gradient( to left, #000 0, #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100% ); } -webkit-mask-image: var(--scroll-fade-mask); mask-image: var(--scroll-fade-mask); -webkit-mask-composite: source-in; mask-composite: intersect; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; @supports (animation-timeline: scroll()) { animation: scroll-fade-reveal-e 1ms ease-in-out; animation-timeline: scroll(self inline); animation-range: calc( 100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24)) ) 100%; animation-fill-mode: both; } @supports not (animation-timeline: scroll()) { --scroll-fade-e: var(--_scroll-fade-size-e); } }@utility scroll-fade-*{ --scroll-fade-size: calc(var(--spacing) * --value(integer)); --scroll-fade-size: --value([length], [percentage]); }@utility scroll-fade-t-*{ --scroll-fade-t-size: calc(var(--spacing) * --value(integer)); --scroll-fade-t-size: --value([length], [percentage]); }@utility scroll-fade-b-*{ --scroll-fade-b-size: calc(var(--spacing) * --value(integer)); --scroll-fade-b-size: --value([length], [percentage]); }@utility scroll-fade-s-*{ --scroll-fade-s-size: calc(var(--spacing) * --value(integer)); --scroll-fade-s-size: --value([length], [percentage]); }@utility scroll-fade-e-*{ --scroll-fade-e-size: calc(var(--spacing) * --value(integer)); --scroll-fade-e-size: --value([length], [percentage]); }@utility scroll-fade-none{ --scroll-fade-mask: none; }@property --shimmer-angle{syntax: "<angle>"; inherits: true; initial-value: 20deg;}@property --shimmer-image{syntax: "*"; inherits: false;}@property --shimmer-text-fill{syntax: "*"; inherits: false;}@theme inline{@keyframes tw-shimmer {from {background-position: 100% 0;} to {background-position: 0 0;}}}@utility shimmer{ --_spread: var(--shimmer-spread, calc(3ch + 40px) ); --_base: currentColor; --_highlight: var( --shimmer-color, oklch(from currentColor l c h / calc(alpha/5) ) ); background-image: var( --shimmer-image, linear-gradient( calc(90deg + var(--shimmer-angle)), var(--_base) calc(50% - var(--_spread)), color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% - var(--_spread) * .5), var(--_highlight) 50%, color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% + var(--_spread) * .5), var(--_base) calc(50% + var(--_spread)) ) ); background-repeat: no-repeat; background-size: calc(200% + var(--_spread) * 2) 100%; background-position: 0 0; background-clip: text; -webkit-background-clip: text; -webkit-text-fill-color: var(--shimmer-text-fill, transparent); animation: tw-shimmer var(--shimmer-duration, 2s) linear infinite; @variant dark { --_highlight: var( --shimmer-color, oklch(from currentColor max(.8, calc(l + .4) ) c h / calc(alpha + .4) ) ); } &:where([dir="rtl"], [dir="rtl"] *) { animation-direction: reverse; } }@utility shimmer-once{animation-iteration-count: 1;}@utility shimmer-reverse{animation-direction: reverse;}@utility shimmer-none{ --shimmer-image: none; --shimmer-text-fill: currentColor; }@utility shimmer-color-*{ --shimmer-color: --value(--color, [color]); --shimmer-color: color-mix( in oklch, --value(--color, [color]) calc(--modifier(integer)*1%) , transparent ); }@utility shimmer-duration-*{ --shimmer-duration: calc(--value(integer)*1ms) ; }@utility shimmer-spread-*{ --shimmer-spread: calc(var(--spacing) * --value(integer)); --shimmer-spread: --value([length], [percentage]); }@utility shimmer-angle-*{ --shimmer-angle: calc(--value(integer)*1deg) ; }@media(prefers-reduced-motion:reduce){.shimmer{animation:none;background-image:none;-webkit-text-fill-color:currentColor}}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-wght-normal-BgDaEnEv.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / .5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / .5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.theme{--font-heading: var(--font-sans);--font-sans: "Geist Variable", sans-serif}:root{--background: oklch(1 0 0);--foreground: oklch(.145 0 0);--card: oklch(1 0 0);--card-foreground: oklch(.145 0 0);--popover: oklch(1 0 0);--popover-foreground: oklch(.145 0 0);--primary: oklch(.205 0 0);--primary-foreground: oklch(.985 0 0);--secondary: oklch(.97 0 0);--secondary-foreground: oklch(.205 0 0);--muted: oklch(.97 0 0);--muted-foreground: oklch(.556 0 0);--accent: oklch(.97 0 0);--accent-foreground: oklch(.205 0 0);--destructive: oklch(.577 .245 27.325);--border: oklch(.922 0 0);--input: oklch(.922 0 0);--ring: oklch(.708 0 0);--chart-1: oklch(.87 0 0);--chart-2: oklch(.556 0 0);--chart-3: oklch(.439 0 0);--chart-4: oklch(.371 0 0);--chart-5: oklch(.269 0 0);--radius: .625rem;--sidebar: oklch(.985 0 0);--sidebar-foreground: oklch(.145 0 0);--sidebar-primary: oklch(.205 0 0);--sidebar-primary-foreground: oklch(.985 0 0);--sidebar-accent: oklch(.97 0 0);--sidebar-accent-foreground: oklch(.205 0 0);--sidebar-border: oklch(.922 0 0);--sidebar-ring: oklch(.708 0 0)}.dark{--background: oklch(.145 0 0);--foreground: oklch(.985 0 0);--card: oklch(.205 0 0);--card-foreground: oklch(.985 0 0);--popover: oklch(.205 0 0);--popover-foreground: oklch(.985 0 0);--primary: oklch(.922 0 0);--primary-foreground: oklch(.205 0 0);--secondary: oklch(.269 0 0);--secondary-foreground: oklch(.985 0 0);--muted: oklch(.269 0 0);--muted-foreground: oklch(.708 0 0);--accent: oklch(.269 0 0);--accent-foreground: oklch(.985 0 0);--destructive: oklch(.704 .191 22.216);--border: oklch(1 0 0 / 10%);--input: oklch(1 0 0 / 15%);--ring: oklch(.556 0 0);--chart-1: oklch(.87 0 0);--chart-2: oklch(.556 0 0);--chart-3: oklch(.439 0 0);--chart-4: oklch(.371 0 0);--chart-5: oklch(.269 0 0);--sidebar: oklch(.205 0 0);--sidebar-foreground: oklch(.985 0 0);--sidebar-primary: oklch(.488 .243 264.376);--sidebar-primary-foreground: oklch(.985 0 0);--sidebar-accent: oklch(.269 0 0);--sidebar-accent-foreground: oklch(.985 0 0);--sidebar-border: oklch(1 0 0 / 10%);--sidebar-ring: oklch(.556 0 0)}html{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.ml-\[2px\]{margin-left:2px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.hidden{display:none}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1em\]{height:1em}.h-full{height:100%}.w-\[2px\]{width:2px}.w-full{width:100%}.shrink-0{flex-shrink:0}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.whitespace-nowrap{white-space:nowrap}.rounded-\[min\(var\(--radius-md\)\,10px\)\]{border-radius:min(var(--radius-md),10px)}.rounded-\[min\(var\(--radius-md\)\,12px\)\]{border-radius:min(var(--radius-md),12px)}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-transparent{border-color:transparent}.bg-current{background-color:currentColor}.bg-clip-padding{background-clip:padding-box}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.align-middle{vertical-align:middle}.text-\[0\.8rem\]{font-size:.8rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.underline-offset-4{text-underline-offset:4px}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{font-family:Avenir Next,PingFang SC,Hiragino Sans GB,Helvetica Neue,sans-serif;color:#213043;background:radial-gradient(circle at top left,rgba(173,199,228,.32),transparent 28%),radial-gradient(circle at bottom right,rgba(195,188,211,.3),transparent 24%),#eef2f6;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bg: #eef2f6;--panel: rgba(255, 255, 255, .74);--panel-strong: rgba(255, 255, 255, .94);--line: rgba(109, 126, 148, .16);--line-strong: rgba(109, 126, 148, .28);--text: #213043;--muted: #5e6d7f;--accent: #6986a3;--accent-strong: #385d86;--accent-soft: rgba(105, 134, 163, .16);--accent-warm: #a89bbb;--shadow: 0 28px 80px rgba(76, 97, 123, .14);--radius-xl: 32px;--radius-lg: 24px;--radius-md: 18px;--radius-sm: 14px}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;min-width:320px;background:var(--bg);color:var(--text)}button,input,textarea{font:inherit}button{cursor:pointer}textarea,input{outline:none}.app-shell{position:relative;min-height:100vh;overflow:hidden}.ambient-cursor{position:fixed;top:0;left:0;pointer-events:none;border-radius:999px;opacity:.75;filter:blur(18px);z-index:0}.ambient-cursor--core{width:180px;height:180px;background:radial-gradient(circle,#91a4bb3d,#91a4bb00 72%)}.ambient-cursor--glow{width:360px;height:360px;background:radial-gradient(circle,#beb3c529,#beb3c500 70%);filter:blur(30px)}.workspace{position:relative;z-index:1;display:grid;grid-template-columns:minmax(320px,.82fr) minmax(560px,1.4fr);gap:24px;width:min(1440px,calc(100% - 48px));margin:0 auto;padding:24px 0}.workspace-topbar{position:relative;z-index:1;display:flex;align-items:flex-end;justify-content:space-between;gap:20px;width:min(1440px,calc(100% - 48px));margin:0 auto;padding:24px 0 0}.workspace-topbar h1{margin:8px 0 0;font-size:clamp(1.9rem,2vw,2.8rem);letter-spacing:-.04em}.workspace-topbar__copy{max-width:720px;margin:10px 0 0;color:var(--muted);line-height:1.7}.workspace-topbar__actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:12px}.workspace-chip{display:grid;gap:4px;min-width:120px;padding:10px 14px;border:1px solid var(--line);border-radius:18px;background:#ffffffb8}.workspace-chip span{color:var(--muted);font-size:.78rem;letter-spacing:.08em;text-transform:uppercase}.workspace-action,.login-button{border:none;border-radius:999px;padding:12px 18px;background:linear-gradient(135deg,var(--accent-strong),var(--accent));color:#fff;box-shadow:0 14px 28px #758aa538;transition:transform .22s ease,box-shadow .22s ease,opacity .22s ease}.workspace-action:hover,.login-button:hover{transform:translateY(-2px);box-shadow:0 18px 32px #758aa547}.workspace-action--ghost,.login-button--ghost,.login-button--dev{border:1px solid rgba(117,138,165,.24);background:#ffffffd1;color:var(--text);box-shadow:none}.workspace-action:disabled,.login-button:disabled{opacity:.6;transform:none;box-shadow:none}.panel-surface{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius-xl);background:var(--panel);-webkit-backdrop-filter:blur(26px);backdrop-filter:blur(26px);box-shadow:var(--shadow)}.panel-surface:before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#ffffff85,#ffffff14);pointer-events:none}.avatar-panel__surface,.chat-panel__surface{height:calc(100vh - 48px);min-height:820px}.avatar-panel__surface{display:flex;flex-direction:column;gap:24px;padding:28px}.eyebrow{display:inline-flex;align-items:center;gap:10px;color:var(--muted);font-size:.78rem;letter-spacing:.16em;text-transform:uppercase}.eyebrow__dot{width:8px;height:8px;border-radius:999px;background:linear-gradient(135deg,var(--accent),var(--accent-warm));box-shadow:0 0 0 8px #91a4bb1f}.avatar-stage{position:relative;display:grid;place-items:center;min-height:380px;border-radius:28px;background:radial-gradient(circle at 50% 45%,#fffffff2,#ffffff26 58%),linear-gradient(180deg,#c2ccda2e,#ebe7ed59);border:1px solid rgba(145,164,187,.16)}.avatar-aura,.avatar-ring{position:absolute;border-radius:50%}.avatar-aura{width:280px;height:280px;background:radial-gradient(circle,#91a4bb38,#91a4bb00 68%);animation:pulseAura 5s ease-in-out infinite}.avatar-ring{border:1px solid rgba(145,164,187,.22)}.avatar-ring--outer{width:310px;height:310px;animation:slowSpin 16s linear infinite}.avatar-ring--inner{width:240px;height:240px;border-style:dashed;animation:slowSpinReverse 12s linear infinite}.avatar-body{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center}.avatar-head{position:relative;width:148px;height:170px;border-radius:44% 44% 42% 42%/38% 38% 48% 48%;background:linear-gradient(180deg,#fffffff5,#e1e7eec7);border:1px solid rgba(145,164,187,.2);box-shadow:inset 0 -14px 32px #91a4bb29}.avatar-eye,.avatar-mouth{position:absolute;background:#4a5568b8}.avatar-eye{top:72px;width:18px;height:10px;border-radius:999px}.avatar-eye--left{left:42px}.avatar-eye--right{right:42px}.avatar-mouth{bottom:38px;left:50%;width:36px;height:8px;border-radius:999px;transform:translate(-50%)}.avatar-neck{width:30px;height:36px;margin-top:-4px;border-radius:0 0 14px 14px;background:linear-gradient(180deg,#e7ebf0f2,#cfd6e0bf)}.avatar-shoulder{width:220px;height:128px;margin-top:-4px;border-radius:50% 50% 28% 28%/38% 38% 24% 24%;background:linear-gradient(180deg,#f5f7faf2,#d6dde5d1);border:1px solid rgba(145,164,187,.18)}.avatar-copy h1,.chat-header h2,.roles-shell__header h3,.editor-panel__header h3{margin:0;letter-spacing:-.03em}.avatar-copy{display:grid;gap:12px}.avatar-copy h1{font-size:clamp(2rem,3vw,3.4rem);line-height:1.02}.avatar-copy p,.roles-shell__header p,.message-bubble p,.role-card p{margin:0;color:var(--muted);line-height:1.7}.status-stack{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.status-card,.roles-placeholder{padding:18px;border:1px solid var(--line);border-radius:22px;background:#ffffffad}.status-card{display:grid;gap:8px}.status-card p{margin:0;color:var(--muted);line-height:1.6}.status-card--accent{background:linear-gradient(180deg,#91a4bb1f,#ffffffc2)}.status-card__label,.section-label,.message-bubble__role,.editor-panel__hint{color:var(--muted);font-size:.74rem;letter-spacing:.14em;text-transform:uppercase}.signal-row{display:flex;flex-wrap:wrap;gap:10px}.signal-pill,.chat-header__meta span,.role-card__badge{display:inline-flex;align-items:center;justify-content:center;padding:8px 12px;border-radius:999px;border:1px solid rgba(145,164,187,.2);background:#ffffffb8;color:#546174;font-size:.82rem}.chat-panel__surface{display:grid;gap:18px;padding:28px;align-content:start;overflow:auto}.chat-header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.chat-header h2{margin-top:10px;font-size:clamp(1.6rem,2vw,2.2rem)}.chat-header p{max-width:760px;margin:10px 0 0;color:var(--muted);line-height:1.7}.chat-header__meta{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px}.message-list{display:flex;flex-direction:column;gap:14px;min-height:260px;max-height:340px;padding-right:4px;overflow:auto}.message-bubble{max-width:min(82%,720px);padding:18px 18px 16px;border-radius:24px;border:1px solid var(--line);background:#ffffffbd}.message-bubble__meta{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}.message-bubble__index{color:var(--muted);font-size:.74rem;letter-spacing:.14em;text-transform:uppercase}.message-bubble--assistant{align-self:flex-start;border-top-left-radius:10px}.message-bubble--user{align-self:flex-end;border-top-right-radius:10px;background:linear-gradient(180deg,#91a4bb2e,#ffffffd1)}.message-bubble--thinking{display:grid;gap:10px}.thinking-line{display:inline-flex;gap:8px}.thinking-dot{width:8px;height:8px;border-radius:999px;background:var(--accent-strong);animation:pulseDot 1.4s ease-in-out infinite}.thinking-dot:nth-child(2){animation-delay:.15s}.thinking-dot:nth-child(3){animation-delay:.3s}.composer,.editor-panel{border:1px solid var(--line);border-radius:26px;background:var(--panel-strong)}.composer{display:grid;gap:14px;padding:16px}.composer__promptline{display:flex;flex-wrap:wrap;gap:10px}.integration-banner{padding:12px 14px;border:1px solid rgba(145,164,187,.16);border-radius:18px;background:#f7f8fae0;color:var(--muted);line-height:1.6}.integration-banner--error{border-color:#b96b6b2e;background:#fff4f4eb;color:#9b5a5a}.integration-banner--dirty,.integration-banner--saving,.integration-banner--idle{color:var(--muted)}.integration-banner--saved,.integration-banner--local{border-color:#758aa533;background:#f4f8fcf0;color:#546174}.composer textarea,.field textarea,.field input{width:100%;border:1px solid rgba(145,164,187,.18);border-radius:18px;background:#f7f8faeb;color:var(--text);transition:border-color .18s ease,box-shadow .18s ease,background .18s ease}.composer textarea{min-height:108px;padding:16px 18px;resize:vertical}.composer textarea:focus,.field textarea:focus,.field input:focus{border-color:#758aa56b;box-shadow:0 0 0 4px #91a4bb1f;background:#fff}.composer__actions{display:flex;align-items:center;justify-content:space-between;gap:16px;color:var(--muted);font-size:.92rem}.composer__actions button{border:none;border-radius:999px;padding:12px 18px;background:linear-gradient(135deg,var(--accent-strong),var(--accent));color:#fff;box-shadow:0 14px 28px #758aa538;transition:transform .22s ease,box-shadow .22s ease,opacity .22s ease}.composer__actions button:hover{transform:translateY(-2px);box-shadow:0 18px 32px #758aa547}.composer__actions button:disabled{opacity:.7;transform:none}.roles-shell{display:grid;gap:18px;min-height:0}.roles-shell__header{display:flex;align-items:end;justify-content:space-between;gap:18px}.roles-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.roles-placeholder{grid-column:1 / -1;display:grid;place-items:center;gap:8px;min-height:180px;color:var(--muted);text-align:center}.roles-placeholder__icon{display:grid;place-items:center;width:48px;height:48px;border-radius:16px;background:#91a4bb1f;color:var(--accent-strong);font-size:1.6rem}.role-card{--pointer-x: 50%;--pointer-y: 50%;position:relative;display:grid;gap:12px;min-height:190px;padding:18px;border:1px solid rgba(145,164,187,.18);border-radius:24px;background:radial-gradient(circle 220px at var(--pointer-x) var(--pointer-y),rgba(145,164,187,.2),transparent 62%),linear-gradient(180deg,#ffffffeb,#f7f8fadb);color:inherit;text-align:left;transition:transform .22s ease,border-color .22s ease,box-shadow .22s ease}.role-card__topline{display:flex;align-items:center;justify-content:space-between;gap:8px}.role-card:after{content:"";position:absolute;inset:1px;border-radius:inherit;border:1px solid rgba(255,255,255,.46);pointer-events:none}.role-card:hover,.role-card--active{transform:translateY(-4px);border-color:#758aa557;box-shadow:0 18px 36px #7a85962e}.role-card strong{font-size:1.04rem}.role-card__status,.role-card__name{color:var(--muted);font-size:.84rem}.role-card__tags{display:flex;flex-wrap:wrap;gap:8px}.role-card__tags span{padding:6px 10px;border-radius:999px;background:#6986a31a;color:var(--accent-strong);font-size:.8rem}.role-card__cta{margin-top:auto;color:var(--accent-strong);font-size:.92rem}.editor-panel{display:grid;gap:18px;padding:20px}.editor-panel__header{display:flex;align-items:end;justify-content:space-between;gap:16px;margin-bottom:18px}.editor-panel__header p{max-width:720px;margin:10px 0 0;color:var(--muted);line-height:1.7}.editor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.field{display:grid;gap:10px}.field span{color:var(--muted);font-size:.95rem}.field input,.field textarea{padding:14px 16px}.field input[readonly]{background:#f1f3f7eb;color:#607082}.field textarea{resize:vertical}.field--wide{grid-column:1 / -1}.editor-actions{display:flex;justify-content:flex-end}.editor-actions button{border:none;border-radius:999px;padding:12px 18px;background:linear-gradient(135deg,var(--accent-strong),var(--accent));color:#fff;box-shadow:0 14px 28px #758aa538}.route-loading,.login-shell{position:relative;display:grid;place-items:center;min-height:100vh;padding:24px;overflow:hidden}.route-loading{background:radial-gradient(circle at top left,rgba(197,208,223,.32),transparent 28%),linear-gradient(180deg,#ffffffbd,#f0f1f5eb)}.route-loading__panel,.login-panel,.login-hero{position:relative;border:1px solid var(--line);border-radius:32px;background:#ffffffb8;-webkit-backdrop-filter:blur(26px);backdrop-filter:blur(26px);box-shadow:var(--shadow)}.route-loading__panel{display:grid;gap:12px;width:min(520px,100%);padding:28px;text-align:center}.route-loading__panel--immersive{width:min(760px,100%);text-align:left;gap:18px}.route-loading__panel h1,.login-hero h1,.login-panel__header h2{margin:0;letter-spacing:-.04em}.route-loading__panel p,.login-hero p,.login-panel__header p,.login-dev p{margin:0;color:var(--muted);line-height:1.7}.login-shell{grid-template-columns:minmax(320px,.95fr) minmax(420px,.85fr);gap:24px;width:min(1440px,100%);margin:0 auto}.login-noise{position:absolute;inset:0;background:radial-gradient(circle at 15% 18%,rgba(145,164,187,.22),transparent 22%),radial-gradient(circle at 84% 20%,rgba(190,179,197,.22),transparent 18%),radial-gradient(circle at 78% 80%,rgba(145,164,187,.18),transparent 22%);filter:blur(18px);pointer-events:none}.login-hero,.login-panel{z-index:1;overflow:hidden;padding:32px}.login-hero{display:grid;align-content:end;gap:16px;min-height:720px;background:linear-gradient(160deg,#ffffffeb,#eff2f7c2),radial-gradient(circle at top right,rgba(145,164,187,.16),transparent 30%)}.login-hero h1{font-size:clamp(2.8rem,5vw,5rem);line-height:.92}.login-highlights,.login-meta,.login-storyboard{display:grid;gap:14px}.login-storyboard__card{padding:18px 20px;border:1px solid rgba(105,134,163,.16);border-radius:24px;background:#ffffff8a}.login-storyboard__card strong{display:block;margin-top:10px;font-size:1.05rem}.login-storyboard__card p{margin-top:8px}.login-highlights{display:flex;flex-wrap:wrap}.login-panel{display:grid;gap:18px;align-content:start}.login-panel__header{display:grid;gap:10px}.login-form{display:grid;gap:16px;padding:20px;border:1px solid var(--line);border-radius:24px;background:#ffffff8f}.login-form--secondary{background:#f7f8fad1}.login-dev{display:grid;gap:10px;padding:20px;border:1px dashed rgba(117,138,165,.32);border-radius:24px;background:#ffffff75}.login-meta{grid-template-columns:repeat(3,minmax(0,1fr))}.restore-steps{display:grid;gap:12px;grid-template-columns:repeat(3,minmax(0,1fr))}.restore-step{display:grid;gap:8px;padding:16px;border-radius:22px;border:1px solid var(--line);background:#ffffff7a}.restore-step span{color:var(--muted);font-size:.74rem;letter-spacing:.14em;text-transform:uppercase}.restore-step--active{border-color:#385d863d;background:linear-gradient(180deg,#6986a31f,#ffffffb8)}.route-loading__pulse{width:180px;height:180px;border-radius:999px;justify-self:end;background:radial-gradient(circle,#6986a329,#6986a300 70%);animation:pulseAura 3.6s ease-in-out infinite}.requirements-shell{display:grid;grid-template-columns:minmax(0,1.28fr) minmax(260px,.72fr);gap:18px}.requirements-shell__main,.requirements-shell__side{display:grid;gap:18px}.requirements-block,.requirements-sidecard,.protocol-shell{padding:20px;border:1px solid var(--line);border-radius:28px;background:#ffffffa3}.requirements-block__header,.protocol-shell__header{display:flex;align-items:end;justify-content:space-between;gap:16px}.requirements-block__header h3,.requirements-sidecard h3,.protocol-shell__header h3,.protocol-layout__title h4,.protocol-section-card__header h4,.protocol-stream__header h4{margin:8px 0 0;letter-spacing:-.03em}.requirements-block__header p,.requirements-sidecard p,.protocol-shell__header p,.protocol-mini-card p,.protocol-section-card p,.protocol-decision-card p{margin:0;color:var(--muted);line-height:1.7}.requirements-block--composer{background:linear-gradient(180deg,#ffffffd1,#f6f8fbe6)}.requirements-sidecard{display:grid;gap:8px}.protocol-shell{display:grid;gap:20px}.protocol-shell__meta{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px}.protocol-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.protocol-layout{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(0,.92fr);gap:18px}.protocol-layout__streams,.protocol-layout__results{display:grid;gap:14px}.protocol-layout__title{display:flex;align-items:end;justify-content:space-between;gap:12px}.protocol-stream-grid,.protocol-results{display:grid;gap:14px}.protocol-stream,.protocol-section-card{padding:18px;border:1px solid rgba(109,126,148,.14);border-radius:24px;background:#ffffffc7}.protocol-stream__header,.protocol-section-card__header{margin-bottom:14px}.protocol-progress-list,.protocol-chart-list,.protocol-pipeline,.protocol-card-grid{display:grid;gap:12px}.protocol-progress-item{display:grid;gap:8px}.protocol-progress-item__meta{display:flex;align-items:end;justify-content:space-between;gap:12px}.protocol-progress-item__meta span{color:var(--muted);font-size:.88rem}.protocol-progress-item__track,.protocol-chart-row__track{position:relative;height:10px;border-radius:999px;background:#6d7e941a;overflow:hidden}.protocol-progress-item__track span,.protocol-chart-row__track span{position:absolute;inset:0 auto 0 0;border-radius:inherit;background:linear-gradient(90deg,var(--accent),var(--accent-warm))}.protocol-progress-item em{color:var(--muted);font-size:.82rem;font-style:normal}.protocol-pipeline{grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}.protocol-pipeline__node{display:grid;gap:10px;padding:14px;border-radius:20px;border:1px solid rgba(109,126,148,.12);background:#f4f7fae0}.protocol-pipeline__dot{width:12px;height:12px;border-radius:999px;background:#6d7e943d}.protocol-pipeline__node--done .protocol-pipeline__dot{background:#4f8a68;box-shadow:0 0 0 6px #4f8a681f}.protocol-pipeline__node--active .protocol-pipeline__dot{background:var(--accent-strong);box-shadow:0 0 0 6px #385d861f}.protocol-mini-card{padding:16px;border-radius:20px;border:1px solid rgba(109,126,148,.12);background:#f4f7fad1}.protocol-mini-card strong{display:block;margin-bottom:8px}.protocol-table-wrap{overflow:auto}.protocol-table{width:100%;border-collapse:collapse;font-size:.92rem}.protocol-table th,.protocol-table td{padding:12px 10px;border-bottom:1px solid rgba(109,126,148,.1);text-align:left;vertical-align:top}.protocol-table th{color:var(--muted);font-weight:600}.protocol-chart-row{display:grid;gap:8px}.protocol-chart-row__meta{display:flex;align-items:center;justify-content:space-between;gap:12px}.protocol-decision-card{display:grid;gap:12px}.protocol-actions{display:flex;flex-wrap:wrap;gap:12px}.protocol-action{display:inline-flex;align-items:center;justify-content:center;min-height:46px;padding:0 18px;border:none;border-radius:999px;background:linear-gradient(135deg,var(--accent-strong),var(--accent));color:#fff;text-decoration:none;box-shadow:0 14px 28px #385d862e}.protocol-action--ghost{border:1px solid rgba(56,93,134,.18);background:#ffffffe0;color:var(--text);box-shadow:none}@keyframes pulseAura{0%,to{transform:scale(.98);opacity:.7}50%{transform:scale(1.04);opacity:1}}@keyframes pulseDot{0%,80%,to{transform:scale(.9);opacity:.4}40%{transform:scale(1.2);opacity:1}}@keyframes slowSpin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes slowSpinReverse{0%{transform:rotate(360deg)}to{transform:rotate(0)}}@media(max-width:1180px){.login-shell{grid-template-columns:1fr}.login-hero{min-height:auto}.workspace-topbar{align-items:flex-start}.workspace,.requirements-shell,.protocol-layout{grid-template-columns:1fr}.avatar-panel__surface,.chat-panel__surface{height:auto;min-height:auto}.avatar-stage{min-height:320px}}@media(max-width:820px){.workspace-topbar,.workspace{width:min(100% - 24px,1440px)}.workspace-topbar{padding:16px 0 0}.workspace{padding:12px 0 24px}.avatar-panel__surface,.chat-panel__surface{padding:20px}.status-stack,.login-meta,.restore-steps,.protocol-metrics,.editor-grid,.roles-grid{grid-template-columns:1fr}.workspace-topbar,.chat-header,.roles-shell__header,.composer__actions,.editor-panel__header{flex-direction:column;align-items:flex-start}.message-bubble{max-width:100%}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.hover\:bg-\[color-mix\(in_oklch\,var\(--secondary\)\,var\(--foreground\)_5\%\)\]:hover{background-color:color-mix(in oklch,var(--secondary),var(--foreground) 5%)}.hover\:underline:hover{text-decoration-line:underline}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem;height:.75rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5 svg:not([class*=size-]){width:.875rem;height:.875rem}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:1rem;height:1rem}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}
