@keyframes cambium-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}
@keyframes line-flow{0%{stroke-dashoffset:100}100%{stroke-dashoffset:0}}
@keyframes line-flow-reverse{0%{stroke-dashoffset:0}100%{stroke-dashoffset:100}}
@keyframes glow-pulse{0%,100%{opacity:0.4}50%{opacity:0.8}}
.animate-line-flow{animation:line-flow 3s linear infinite;will-change:stroke-dashoffset}
.animate-line-flow-reverse{animation:line-flow-reverse 3s linear infinite;will-change:stroke-dashoffset}
.animate-glow-pulse{animation:glow-pulse 3s ease-in-out infinite}
.cambium-viewer-container{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif}
.cambium-viewer-container *{box-sizing:border-box}
.cambium-viewer-shell{background:linear-gradient(135deg,#f8fafc 0%,#ffffff 50%,#f8fafc 100%);border-radius:12px;overflow:hidden;position:relative;border:2px solid #e2e8f0}
.cambium-viewer-container .loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;color:#666}
.cambium-viewer-container .spinner{width:24px;height:24px;border:3px solid #f3f3f3;border-top:3px solid #666;border-radius:50%;animation:cambium-spin 1s linear infinite;margin-bottom:8px}
.cambium-error{background:linear-gradient(135deg,#fef2f2 0%,#fee2e2 100%);color:#dc2626;padding:24px;border-radius:12px;text-align:center;border:1px solid #fecaca}
.cambium-success{background:linear-gradient(135deg,#f0fdf4 0%,#dcfce7 100%);color:#16a34a;padding:16px;border-radius:8px;text-align:center;border:1px solid #bbf7d0}