.ai-loading{display:inline-flex;align-items:center;gap:8px;pointer-events:none;opacity:.85}.ai-loading::before{content:"";width:14px;height:14px;border-radius:50%;border:2px solid currentColor;border-top-color:transparent;animation:ai-spin .7s linear infinite;flex-shrink:0}@keyframes ai-spin{to{transform:rotate(360deg)}}.ai-shimmer{background:linear-gradient(90deg,#e2e8f0 0%,#f1f5f9 50%,#e2e8f0 100%);background-size:200% 100%;animation:ai-shimmer 1.6s ease-in-out infinite;border-radius:6px;color:transparent !important;user-select:none;pointer-events:none;min-height:1em}@keyframes ai-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}.ai-generating-banner{position:fixed;top:18px;right:18px;z-index:9990;display:flex;align-items:center;gap:12px;padding:12px 18px 12px 14px;background:linear-gradient(135deg,#0f172a 0%,#1e1b4b 100%);color:#fff;border-radius:14px;box-shadow:0 20px 50px -20px rgba(15,23,42,.45),0 0 0 1px rgba(255,255,255,.06) inset;font-family:'Inter',system-ui,sans-serif;font-size:.9rem;font-weight:500;max-width:380px;animation:ai-banner-in .35s cubic-bezier(.16,1,.3,1)}.ai-generating-banner.is-hiding{animation:ai-banner-out .25s ease forwards}@keyframes ai-banner-in{from{opacity:0;transform:translateY(-12px) scale(.96)}to{opacity:1;transform:none}}@keyframes ai-banner-out{to{opacity:0;transform:translateY(-8px) scale(.97)}}.ai-generating-banner .ai-glow{width:34px;height:34px;border-radius:50%;background:radial-gradient(circle at 30% 30%,#a5b4fc,#6366f1 50%,#4338ca 100%);position:relative;flex-shrink:0;box-shadow:0 0 0 0 rgba(99,102,241,.5);animation:ai-pulse 2s ease-in-out infinite}@keyframes ai-pulse{0%,100%{box-shadow:0 0 0 0 rgba(99,102,241,.45)}50%{box-shadow:0 0 0 8px rgba(99,102,241,0)}}.ai-generating-banner .ai-glow::after{content:"✨";position:absolute;inset:0;display:grid;place-items:center;font-size:18px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.4));animation:ai-twinkle 2.4s ease-in-out infinite}@keyframes ai-twinkle{0%,100%{transform:scale(1)}50%{transform:scale(1.15) rotate(8deg)}}.ai-generating-banner .ai-text{display:flex;flex-direction:column;gap:2px;min-width:0}.ai-generating-banner .ai-title{font-weight:700;letter-spacing:-.01em;display:flex;align-items:center;gap:6px}.ai-generating-banner .ai-dots::after{content:"";display:inline-block;animation:ai-dots 1.4s steps(4,end) infinite}@keyframes ai-dots{0%{content:""}25%{content:"."}50%{content:".."}75%{content:"..."}100%{content:""}}.ai-generating-banner .ai-sub{font-size:.78rem;color:rgba(255,255,255,.7);font-weight:400;transition:opacity .18s ease}.ai-cursor::after{content:"▍";margin-left:2px;color:#6366f1;animation:ai-blink 1s steps(2,end) infinite}@keyframes ai-blink{50%{opacity:0}}@media (prefers-color-scheme:dark){.ai-shimmer{background:linear-gradient(90deg,#1e293b 0%,#334155 50%,#1e293b 100%);background-size:200% 100%}}@media (max-width:640px){.ai-generating-banner{top:auto;bottom:18px;left:18px;right:18px;max-width:none}}[data-reveal]{opacity:0;transform:translateY(18px);transition:opacity .6s cubic-bezier(.16,1,.3,1),transform .6s cubic-bezier(.16,1,.3,1);will-change:opacity,transform}[data-reveal="left"]{transform:translateX(-24px) translateY(0)}[data-reveal="right"]{transform:translateX(24px) translateY(0)}[data-reveal="scale"]{transform:scale(.96)}[data-reveal].is-revealed{opacity:1;transform:translateY(0) translateX(0) scale(1)}@media (prefers-reduced-motion:reduce){[data-reveal]{opacity:1 !important;transform:none !important;transition:none !important}.ai-loading::before,.ai-shimmer,.ai-generating-banner .ai-glow,.ai-generating-banner .ai-glow::after,.ai-generating-banner .ai-dots::after,.ai-cursor::after{animation:none !important}}.btn,.ad-btn,.bp-btn,.dc-btn,.bs-btn-primary,.hero-btn-primary,.b-btn{transition:transform .15s ease,box-shadow .15s ease,background .15s ease,color .15s ease}.btn:hover,.ad-btn:hover,.bp-btn:hover,.dc-btn:hover,.bs-btn-primary:hover,.b-btn:hover{transform:translateY(-1px)}.tpl-card,.ad-card,.bp-card,.b-kpi{transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}.tpl-card:hover{transform:translateY(-2px)}