/* Content placeholders share the mobile shell's neutral tokens and shimmer.
   Each composition belongs to its pending region, at every viewport width. */
@keyframes portal-loading-shimmer { from { background-position: 120% 0; } to { background-position: -120% 0; } }
.portal-sk {
  display: block;
  border-radius: 6px;
  background: linear-gradient(100deg, color-mix(in srgb, var(--portal-ink) 9%, transparent) 30%, color-mix(in srgb, var(--portal-ink) 17%, transparent) 50%, color-mix(in srgb, var(--portal-ink) 9%, transparent) 70%) 0 0 / 220% 100%;
  animation: portal-loading-shimmer 1.3s linear infinite;
}
.portal-media-skeleton { display: flex; flex-direction: column; justify-content: flex-end; width: 100%; height: 100%; min-height: 0; padding: clamp(12px, 3%, 24px); gap: 14px; }
.portal-media-skeleton__screen { flex: 1; min-height: 0; border-radius: 8px; }
.portal-media-skeleton__controls { display: flex; align-items: center; gap: 12px; height: 22px; }
.portal-media-skeleton__controls > .portal-sk { width: 22px; height: 18px; }
.portal-media-skeleton__controls > .portal-sk:nth-child(2) { flex: 1; height: 5px; }
.portal-auth-body .portal-player-frame.is-initializing > .portal-player-loading { min-height: 0; padding: 0; }
.portal-auth-body .portal-player-frame[aria-busy="true"] > .portal-player-loading { position: absolute; inset: 0; height: 100%; }
.portal-player-loading > .portal-media-skeleton[hidden], .portal-sk[hidden], [data-upgrade-price-skeleton][hidden], [data-purchase-skeleton][hidden], [data-purchase-status][hidden], .portal-chart-skeleton[hidden] { display: none; }
.portal-chart-skeleton { display: flex; flex-direction: column; width: 100%; height: 100%; min-height: 0; padding: 18px; gap: 16px; background: var(--portal-surface); }
.portal-chart-skeleton__toolbar, .portal-chart-skeleton__axis { display: flex; align-items: center; gap: 12px; }
.portal-chart-skeleton__toolbar > .portal-sk { height: 12px; width: 80px; }
.portal-chart-skeleton__toolbar > .portal-sk:first-child { width: 112px; }
.portal-chart-skeleton__toolbar > .portal-sk:last-child { margin-left: auto; width: 36px; }
.portal-chart-skeleton__plot { flex: 1; min-height: 70px; display: flex; flex-direction: column; justify-content: space-between; border-left: 1px solid var(--portal-border); border-bottom: 1px solid var(--portal-border); padding: 12px; }
.portal-chart-skeleton__plot > .portal-sk { height: 1px; width: 100%; }
.portal-chart-skeleton__axis { justify-content: space-between; padding-left: 12px; }
.portal-chart-skeleton__axis > .portal-sk { width: 42px; height: 8px; }
.indicator-tv-placeholder.portal-chart-loading, .indicator-demo-feedback.portal-chart-loading { padding: 0; gap: 0; background: var(--portal-surface); }
.indicator-tv-placeholder.portal-chart-loading { position: absolute; inset: 0; z-index: 2; pointer-events: none; }
.indicator-tv-placeholder.portal-chart-loading[hidden], .portal-chart-error[hidden] { display: none; }
.portal-chart-error { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; padding: 24px; background: var(--portal-surface); color: var(--portal-ink); z-index: 3; text-align: center; }
.portal-chart-error p { margin: 0; }
.portal-asset-skeleton { width: 112px; height: 14px; }
[data-indicator-chart][aria-busy="false"] [data-chart-symbol]:empty { display: none; }
.sv-chart-state.portal-chart-loading { padding: 0; }
.portal-price-skeleton { display: grid; justify-items: end; gap: 7px; }
.v3-plan__price > .portal-price-skeleton { display: grid; }
.portal-price-skeleton > .portal-sk { width: 96px; height: 20px; }
.portal-price-skeleton > .portal-sk + .portal-sk { width: 118px; height: 10px; }
.v3-plan__price > [hidden] { display: none; }
.portal-purchase-skeleton { display: grid; gap: 20px; margin: 16px 0; }
.portal-purchase-skeleton__section { display: grid; gap: 9px; }
.portal-purchase-skeleton__section > .portal-sk { height: 12px; width: 82%; }
.portal-purchase-skeleton__section > .portal-sk:first-child { width: 36%; height: 14px; }
.portal-purchase-skeleton__section > .portal-sk:last-child { width: 62%; }
.portal-purchase-skeleton__offer { display: flex; gap: 12px; align-items: center; border: 1px solid var(--portal-border); border-radius: 10px; padding: 14px; }
.portal-purchase-skeleton__offer > .portal-sk:first-child { width: 16px; height: 16px; border-radius: 50%; }
.portal-purchase-skeleton__offer > .portal-sk:nth-child(2) { flex: 1; height: 12px; }
.portal-purchase-skeleton__offer > .portal-sk:last-child { width: 60px; height: 20px; }
.portal-purchase-skeleton__section > .portal-sk.portal-purchase-skeleton__field { height: 44px; width: 100%; }
.portal-purchase-skeleton__summary { display: flex; justify-content: space-between; }
.portal-purchase-skeleton__summary > .portal-sk { width: 34%; height: 16px; }
.portal-result-title-skeleton { width: min(85%, 560px); height: 1em; margin: .2em 0; }
.portal-result-lead-skeleton { width: min(80%, 460px); height: 1em; }
.portal-result-summary-skeleton { display: grid; align-content: start; gap: 18px; }
.portal-result-summary-skeleton > .portal-sk { height: 14px; width: 74%; }
.portal-result-summary-skeleton > .portal-sk:nth-child(2) { height: 22px; width: 54%; }
.portal-result-summary-skeleton[hidden] { display: none; }
/* A pending action retains its label, geometry and native disabled state. */
.portal-action-busy, #nativeBugForm [type="submit"], #feedbackBtnSubmit, [data-pw-icon-option], .opb-cookie-consent [data-consent] { position: relative; }
.portal-action-busy::after, #nativeBugForm [type="submit"][aria-busy="true"]::after, #feedbackBtnSubmit[aria-busy="true"]::after, [data-pw-page][aria-busy="true"] [data-pw-icon-option][aria-checked="true"]::after, .opb-cookie-consent [data-consent][aria-busy="true"]::after { content: ''; position: absolute; inset: auto 10px 3px; height: 2px; border-radius: 2px; background: currentColor; opacity: .5; animation: portal-action-pulse 1s ease-in-out infinite alternate; }
@keyframes portal-action-pulse { to { opacity: .12; } }
@media (prefers-reduced-motion: reduce) { .portal-sk, .portal-action-busy::after, #nativeBugForm [type="submit"]::after, #feedbackBtnSubmit::after, [data-pw-icon-option]::after, .opb-cookie-consent [data-consent]::after { animation: none; } }
