/* Reserved shapes for data that is still being fetched. Empty/error states use
   their own messages; skeletons exist only while a request is in flight. */
@keyframes data-skeleton-shimmer{to{background-position-x:-200%}}
.chart-skeleton,.currency-table-skeleton{--skeleton-base:color-mix(in srgb,var(--line,var(--lm-line,#e5e7eb)) 72%,var(--surface,#fff));--skeleton-shine:color-mix(in srgb,var(--surface,#fff) 80%,var(--skeleton-base));}
.chart-skeleton{display:none;position:absolute;inset:0;z-index:4;overflow:hidden;background:var(--surface,var(--lm-bg,#fff));pointer-events:none}
[data-loading]>.chart-skeleton{display:block}
.chart-skeleton-grid{position:absolute;inset:14px 0 14px 0;background:repeating-linear-gradient(to bottom,transparent 0,transparent calc(25% - 1px),var(--skeleton-base) calc(25% - 1px),var(--skeleton-base) 25%);opacity:.75}
.chart-skeleton-curve{position:absolute;inset:18% 9% 17% 3%;background:linear-gradient(100deg,var(--skeleton-base) 20%,var(--skeleton-shine) 50%,var(--skeleton-base) 80%);background-size:200% 100%;clip-path:polygon(0 80%,10% 69%,18% 72%,27% 48%,35% 58%,44% 32%,53% 43%,62% 24%,70% 37%,79% 12%,88% 25%,100% 5%,100% 100%,0 100%);opacity:.8;animation:data-skeleton-shimmer 1.8s ease-in-out infinite}
.chart-skeleton-axis{position:absolute;inset:auto 0 4px;display:block;height:10px;background:linear-gradient(to right,var(--skeleton-base) 0 13%,transparent 13% 43%,var(--skeleton-base) 43% 57%,transparent 57% 88%,var(--skeleton-base) 88% 100%);border-radius:5px;opacity:.75}
.universe-chart-canvas[data-loading]>.universe-chart-message,.lm-chart-stage[data-loading]>#lm-chart-empty{opacity:0;pointer-events:none}
.universe-chart-canvas[data-loading]>.universe-chart-labels{visibility:hidden}
.lm-page[data-quotes-loading] #lm-main-price,.lm-page[data-quotes-loading] #lm-main-change,.lm-page[data-quotes-loading] [data-lm-price],.lm-page[data-quotes-loading] [data-lm-change]{display:inline-block;color:transparent!important;border-radius:6px;background:linear-gradient(100deg,#e8ebf0 20%,#f7f8fa 50%,#e8ebf0 80%);background-size:200% 100%;animation:data-skeleton-shimmer 1.8s ease-in-out infinite;user-select:none}
.lm-page[data-quotes-loading] #lm-main-price{min-width:130px}.lm-page[data-quotes-loading] #lm-main-change{min-width:55px}.lm-page[data-quotes-loading] [data-lm-price]{min-width:64px}.lm-page[data-quotes-loading] [data-lm-change]{min-width:46px}
.currency-table-shell{position:relative}
.currency-table-skeleton{display:none;position:absolute;inset:0;z-index:2;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;padding:12px;background:var(--surface,#fff);pointer-events:none}
[data-currency-loading] .currency-table-columns{visibility:hidden}
[data-currency-loading] .currency-table-skeleton{display:grid}
.table-skeleton-card{display:grid;gap:18px;align-content:start;padding:16px;border:1px solid var(--line,#e5e7eb);border-radius:10px}
.table-skeleton-card>span,.skeleton-bar{display:block;width:70%;height:13px;border-radius:5px;background:linear-gradient(100deg,var(--surface-2,#e8ebf0) 20%,var(--surface,#fff) 50%,var(--surface-2,#e8ebf0) 80%);background-size:200% 100%;animation:data-skeleton-shimmer 1.8s ease-in-out infinite}
.table-skeleton-card>span:first-child{width:45%;height:19px;margin-bottom:12px}.table-skeleton-card>span:nth-child(odd){width:82%}
.exchange-skeleton-row .skeleton-bar{width:80%;max-width:130px}.exchange-skeleton-row .skeleton-name{width:70%;max-width:160px;height:18px}.exchange-skeleton-row td:last-child .skeleton-bar{width:30px}
.atlas-quote-spark[data-loading]{position:relative}
.atlas-quote-spark[data-loading]::before{content:"";display:block;width:100%;height:70px;flex:none;background:linear-gradient(100deg,var(--surface-2,#e8ebf0) 20%,var(--surface,#fff) 50%,var(--surface-2,#e8ebf0) 80%);background-size:200% 100%;clip-path:polygon(0 75%,14% 58%,24% 70%,36% 36%,49% 48%,62% 25%,76% 41%,88% 17%,100% 29%,100% 100%,0 100%);animation:data-skeleton-shimmer 1.8s ease-in-out infinite}
.atlas-quote-spark[data-loading]>.hint{position:absolute;opacity:0}
.market-strip-card[data-spark-loading] .market-strip-spark{background:linear-gradient(100deg,var(--surface-2,#e8ebf0) 20%,var(--surface,#fff) 50%,var(--surface-2,#e8ebf0) 80%);background-size:200% 100%;clip-path:polygon(0 75%,16% 48%,29% 67%,43% 27%,57% 48%,73% 21%,87% 40%,100% 12%,100% 100%,0 100%);animation:data-skeleton-shimmer 1.8s ease-in-out infinite}
.market-strip-card[data-spark-loading] .mini-line,.market-strip-card[data-spark-loading] .mini-area{visibility:hidden}
.portal-skeleton-card{display:grid;gap:12px;padding:18px;margin:12px 0;border:1px solid var(--line,#e5e7eb);border-radius:10px;min-height:120px}
.portal-skeleton-card>span,.portal-skeleton-row span{display:block;width:74%;height:14px;border-radius:5px;background:linear-gradient(100deg,var(--surface-2,#e8ebf0) 20%,var(--surface,#fff) 50%,var(--surface-2,#e8ebf0) 80%);background-size:200% 100%;animation:data-skeleton-shimmer 1.8s ease-in-out infinite}
.portal-skeleton-card>span:first-child{width:43%;height:20px}.portal-skeleton-card>span:last-child{width:59%}
.portal-skeleton-row td{padding:16px!important}.portal-skeleton-row td span{display:inline-block;width:30%;margin-inline-end:12%}.portal-skeleton-row td span:last-child{width:20%}
#portalAPIOutput[data-loading]{position:relative;min-height:130px;color:transparent!important}
#portalAPIOutput[data-loading]::after{content:"";position:absolute;inset:18px auto auto 18px;width:65%;height:75px;border-radius:5px;background:repeating-linear-gradient(to bottom,var(--surface-2,#e8ebf0) 0 12px,transparent 12px 26px);animation:data-skeleton-shimmer 1.8s ease-in-out infinite}
@media(max-width:900px){.currency-table-skeleton{grid-template-columns:1fr}.currency-table-skeleton .table-skeleton-card:nth-child(2){display:none}}
@media(prefers-reduced-motion:reduce){.chart-skeleton-curve,.lm-page[data-quotes-loading] #lm-main-price,.lm-page[data-quotes-loading] #lm-main-change,.lm-page[data-quotes-loading] [data-lm-price],.lm-page[data-quotes-loading] [data-lm-change],.table-skeleton-card>span,.skeleton-bar,.atlas-quote-spark[data-loading]::before,.market-strip-card[data-spark-loading] .market-strip-spark,.portal-skeleton-card>span,.portal-skeleton-row span,#portalAPIOutput[data-loading]::after{animation:none}}
