.chart-line{fill:none;stroke-width:2.5;stroke-linecap:round;animation:drawLine 1.5s ease-in-out forwards}.chart-line-positive{stroke:#10b981}.chart-line-negative{stroke:#ef4444}.chart-area{fill-opacity:.15;animation:fadeIn 1.5s ease-in-out forwards}.chart-area-positive{fill:#10b981}.chart-area-negative{fill:#ef4444}.chart-dot{r:4;fill:#fff;stroke-width:2.5;animation:fadeIn 1.5s ease-in-out forwards}.chart-dot-positive{stroke:#10b981}.chart-dot-negative{stroke:#ef4444}@keyframes drawLine{0%{stroke-dashoffset:1000;stroke-dasharray:1000}to{stroke-dashoffset:0;stroke-dasharray:1000}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.metric-card{transition:transform .2s ease,box-shadow .2s ease;background-color:#fff;border:1px solid #f3f4f6}.metric-card:hover{transform:translateY(-2px);box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.data-table tbody tr{transition:background-color .2s ease;background-color:#fff}.data-table tbody tr:hover{background-color:#f3f4f6}.badge-pulse{animation:pulse 2s infinite}@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(16,185,129,.4)}70%{box-shadow:0 0 0 6px rgba(16,185,129,0)}to{box-shadow:0 0 0 0 rgba(16,185,129,0)}}