@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes shimmer{0%{background-position:-400px 0}to{background-position:400px 0}}@keyframes pulseGlow{0%,to{text-shadow:0 0 0 transparent}50%{text-shadow:0 0 8px rgba(0,153,102,.4)}}@keyframes spinnerRotate{to{transform:rotate(1turn)}}.dashboard{padding:1.5rem 2rem;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:linear-gradient(135deg,#f5f7fa,#e8ecf1);color:#333;min-height:100vh;animation:fadeIn .5s ease-out}.dashboard h1{margin-bottom:1.25rem;font-size:2rem;font-weight:700;letter-spacing:-.02em;animation:fadeInUp .6s ease-out}.dashboard h2{margin-top:2rem;font-size:1.5rem;font-weight:600;animation:fadeInUp .5s ease-out both}.dashboard button{margin-top:1rem;padding:.6rem 1.25rem;font-size:1rem;font-weight:500;cursor:pointer;border:1px solid #d0d5dd;border-radius:.5rem;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.06);transition:background-color .2s ease,box-shadow .25s ease,transform .15s ease}.dashboard button:hover{background:#f0f4ff;box-shadow:0 4px 12px rgba(0,0,0,.1);transform:translateY(-1px)}.dashboard button:active{transform:translateY(0);box-shadow:0 1px 3px rgba(0,0,0,.08)}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));grid-gap:1rem;gap:1rem;margin:1rem 0}.card{background:#fff;border-radius:.75rem;box-shadow:0 2px 8px rgba(0,0,0,.08);padding:1.25rem;line-height:1.5;animation:fadeInUp .5s ease-out both;transition:box-shadow .3s ease,transform .3s ease}.card:hover{box-shadow:0 8px 24px rgba(0,0,0,.12);transform:translateY(-4px)}.card h2{margin-top:0;font-size:1.25rem;animation:none}.card .aqi{font-size:1.6rem;font-weight:700;margin:.25rem 0;animation:pulseGlow 3s ease-in-out infinite}.components{list-style:none;padding:0;margin:.75rem 0 0}.components li{display:flex;justify-content:space-between;font-size:.9rem;padding:.3rem 0;border-bottom:1px solid #f0f0f0;opacity:0;animation:fadeInUp .35s ease-out forwards}.components li:first-child{animation-delay:.05s}.components li:nth-child(2){animation-delay:.1s}.components li:nth-child(3){animation-delay:.15s}.components li:nth-child(4){animation-delay:.2s}.components li:nth-child(5){animation-delay:.25s}.components li:nth-child(6){animation-delay:.3s}.components li:nth-child(7){animation-delay:.35s}.components li:nth-child(8){animation-delay:.4s}.components li:nth-child(9){animation-delay:.45s}.components li:nth-child(10){animation-delay:.5s}.components li:last-child{border-bottom:none}.viz-row{display:grid;grid-template-columns:1fr 1fr;grid-gap:1.5rem;gap:1.5rem;align-items:start;margin-top:2rem}.chart-container,.map-container{background:#fff;border-radius:1rem;padding:1.25rem;box-shadow:0 2px 8px rgba(0,0,0,.08);animation:fadeInUp .6s ease-out both;transition:box-shadow .3s ease,transform .3s ease}.chart-container:hover,.map-container:hover{box-shadow:0 8px 24px rgba(0,0,0,.12);transform:translateY(-2px)}.chart-container{animation-delay:.1s}.chart-container h2,.map-container h2{margin-top:0;margin-bottom:.75rem;font-size:1.15rem}.map-container{min-height:350px;animation-delay:.2s}@media (max-width:768px){.viz-row{grid-template-columns:1fr}}.loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:1.5rem;animation:fadeIn .4s ease-out}.spinner{width:40px;height:40px;border:3px solid #e0e0e0;border-top-color:#009966;border-radius:50%;animation:spinnerRotate .8s linear infinite}.loading-state p{font-size:1.1rem;color:#666}.prompt-state{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:1rem;text-align:center;animation:fadeInUp .5s ease-out}.prompt-state p{font-size:1.15rem;color:#555;max-width:400px;line-height:1.6}.skeleton-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));grid-gap:1rem;gap:1rem;margin:1rem 0}.skeleton-card{background:#fff;border-radius:.75rem;padding:1.25rem;box-shadow:0 2px 8px rgba(0,0,0,.06)}.skeleton-line{height:14px;border-radius:4px;background:linear-gradient(90deg,#eee 25%,#f5f5f5 50%,#eee 75%);background-size:400px 100%;animation:shimmer 1.5s ease-in-out infinite;margin-bottom:.75rem}.skeleton-line.wide{width:80%}.skeleton-line.short{width:50%}.skeleton-line.tall{height:24px;width:40%;margin-bottom:1rem}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}