/* Product narratives: a quiet input → processing → confirmation sequence.
 * SVG coordinates, shapes and motion stay local; no raster/video dependency.
 * Every effect has an informative static resting state and a motion-free mode.
 */
.asa-product-row-scene {
	--asa-row-cycle: 8.4s;
	--asa-row-signal: var(--accent, var(--primary, #5986b5));
	--asa-row-secondary: var(--row-secondary, var(--amber, #e6a342));
}
.asa-product-row-scene .asa-row-depth {
	fill: color-mix(in srgb, var(--asa-row-signal) 12%, var(--surface, #fff));
	stroke: color-mix(in srgb, var(--asa-row-signal) 22%, var(--surface, #fff));
	stroke-width: 1;
	stroke-linejoin: round;
}
.asa-product-row-scene .asa-row-edge {
	fill: none;
	stroke: color-mix(in srgb, var(--surface, #fff) 88%, var(--asa-row-signal));
	stroke-width: 2;
	stroke-linecap: round;
	opacity: .9;
}
.asa-product-row-scene .asa-row-node {
	fill: var(--surface, #fff);
	stroke: var(--row-paper-edge, color-mix(in srgb, var(--asa-row-signal) 40%, var(--surface, #fff)));
	stroke-width: 1.8;
	stroke-linejoin: round;
	filter: drop-shadow(0 3px 4px rgba(15, 35, 80, .09));
}
.asa-product-row-scene .asa-row-node-ink,
.asa-product-row-scene .asa-row-node-tick {
	fill: none;
	stroke: var(--row-ink, var(--asa-row-signal));
	stroke-width: 2.3;
	stroke-linecap: round;
	stroke-linejoin: round;
}
.asa-product-row-scene .asa-row-node-tick {
	stroke: var(--asa-row-signal);
	stroke-width: 2.8;
}
.asa-product-row-scene .asa-row-connector {
	fill: none;
	stroke: var(--asa-row-signal);
	stroke-width: 5;
	stroke-linecap: round;
	stroke-linejoin: round;
	opacity: .11;
}
.asa-product-row-scene .asa-row-narrative-flow {
	fill: none;
	stroke: var(--asa-row-signal);
	stroke-width: 3;
	stroke-linecap: round;
	stroke-linejoin: round;
	stroke-dasharray: 15 85;
	stroke-dashoffset: 0;
	opacity: .85;
	animation: asa-row-signal-path var(--asa-row-cycle) cubic-bezier(.4, 0, .2, 1) infinite;
}
.asa-product-row-scene .asa-row-response-flow,
.asa-product-row-scene .asa-row-currency-return {
	animation-delay: -4.2s;
	stroke: var(--asa-row-secondary);
}
.asa-product-row-scene .asa-row-entry,
.asa-product-row-scene .asa-row-input-pulse {
	animation: asa-row-input-arrives var(--asa-row-cycle) cubic-bezier(.4, 0, .2, 1) infinite;
}
.asa-product-row-scene .asa-row-processing {
	animation: asa-row-process-signal var(--asa-row-cycle) ease-in-out infinite;
}
.asa-product-row-scene .asa-row-confirmation,
.asa-product-row-scene .asa-row-output-pulse {
	animation: asa-row-output-ready var(--asa-row-cycle) cubic-bezier(.4, 0, .2, 1) infinite;
}
.asa-product-row-scene .asa-row-stage-point,
.asa-product-row-scene .asa-row-transaction,
.asa-product-row-scene .asa-row-neural-node,
.asa-product-row-scene .asa-row-chart-point {
	fill: var(--asa-row-signal);
	stroke: var(--surface, #fff);
	stroke-width: 2.2;
}
.asa-product-row-scene .asa-row-stage-point {
	animation: asa-row-stage-ready var(--asa-row-cycle) ease-in-out infinite;
}
.asa-product-row-scene .asa-row-asset-plaque {
	fill: color-mix(in srgb, var(--surface, #fff) 94%, var(--asa-row-signal));
	stroke: color-mix(in srgb, var(--asa-row-signal) 38%, var(--surface, #fff));
	stroke-width: 1.3;
}
.asa-product-row-scene .asa-row-telemetry,
.asa-product-row-scene .asa-row-ledger-read,
.asa-product-row-scene .asa-row-neural-link,
.asa-product-row-scene .asa-row-inventory-scan {
	fill: none;
	stroke: var(--asa-row-signal);
	stroke-width: 3;
	stroke-linecap: round;
	stroke-linejoin: round;
}
.asa-product-row-scene .asa-row-telemetry {
	stroke-dasharray: 100;
	animation: asa-row-measured-output var(--asa-row-cycle) ease-in-out infinite;
}
.asa-product-row-scene .asa-row-inventory-scan {
	stroke: var(--asa-row-secondary);
	animation: asa-row-warehouse-read var(--asa-row-cycle) ease-in-out infinite;
}
.asa-product-row-scene .asa-row-ledger-read {
	animation: asa-row-ledger-extract var(--asa-row-cycle) ease-in-out infinite;
}
.asa-product-row-scene .asa-row-value,
.asa-product-row-scene .asa-row-line-unit,
.asa-product-row-scene .asa-row-contract-packet,
.asa-product-row-scene .asa-row-commerce-packet,
.asa-product-row-scene .asa-row-logistics-packet {
	fill: var(--asa-row-signal);
}
.asa-product-row-scene .asa-row-value {
	transform-origin: left center;
	animation: asa-row-value-resolves var(--asa-row-cycle) cubic-bezier(.4, 0, .2, 1) infinite;
}
.asa-product-row-scene .asa-row-table-cell { opacity: .4; }
.asa-product-row-scene .asa-row-contract-packet {
	animation: asa-row-request-packet var(--asa-row-cycle) ease-in-out infinite;
}
.asa-product-row-scene .asa-row-commerce-packet {
	stroke: var(--surface, #fff);
	stroke-width: 1.3;
	animation: asa-row-order-packet var(--asa-row-cycle) ease-in-out infinite;
}
.asa-product-row-scene .asa-row-logistics-packet {
	stroke: var(--surface, #fff);
	stroke-width: 1.3;
	animation: asa-row-material-process var(--asa-row-cycle) ease-in-out infinite;
}
.asa-product-row-scene .asa-row-package-fold {
	fill: color-mix(in srgb, var(--asa-row-signal) 22%, var(--surface, #fff));
	stroke: var(--asa-row-signal);
	stroke-width: 1.2;
}
.asa-product-row-scene .asa-row-freight-location {
	fill: var(--asa-row-secondary);
	stroke: var(--surface, #fff);
	stroke-width: 2;
}
.asa-product-row-scene .asa-row-freight-core { fill: var(--surface, #fff); }

/* The original topical geometry now participates in the same story rhythm.
 * Small resting movements do not fight the real task-specific effects.
 */
.asa-product-row-scene .asa-row-float,
.asa-product-row-scene .asa-row-drift {
	animation: asa-row-system-settle var(--asa-row-cycle) ease-in-out infinite;
}
.asa-product-row-scene .asa-row-drift { animation-delay: -.45s; }
.asa-product-row-scene .asa-row-breathe { animation: asa-row-system-ready var(--asa-row-cycle) ease-in-out infinite; }
.asa-product-row-scene .asa-row-route {
	stroke-width: 2;
	stroke-dasharray: 7 12;
	opacity: .36;
	animation: asa-row-route-activity var(--asa-row-cycle) linear infinite;
}
.asa-product-row-scene .asa-row-chart { animation: asa-row-report-trace var(--asa-row-cycle) cubic-bezier(.4, 0, .2, 1) infinite; }
.asa-product-row-scene .asa-row-check { animation: asa-row-result-check var(--asa-row-cycle) ease-in-out infinite; }
.asa-product-row-scene .asa-row-scan { animation: asa-row-document-read var(--asa-row-cycle) ease-in-out infinite; }
.asa-product-row-scene .asa-row-bar { animation: asa-row-report-column var(--asa-row-cycle) cubic-bezier(.4, 0, .2, 1) infinite; }
.asa-product-row-scene .asa-row-gear { animation: asa-row-production-cycle var(--asa-row-cycle) ease-in-out infinite; }
.asa-product-row-scene .asa-row-stock { animation: asa-row-stock-resolves var(--asa-row-cycle) ease-in-out infinite; }
.asa-product-row-scene .asa-row-data { animation: asa-row-data-delivery var(--asa-row-cycle) ease-in-out infinite; }
.asa-product-row-scene .asa-row-material-packet { animation: asa-row-material-delivery var(--asa-row-cycle) ease-in-out infinite; }
.asa-product-row-scene .asa-row-conveyor { animation: asa-row-production-unit var(--asa-row-cycle) ease-in-out infinite; }
.asa-product-row-scene .asa-row-schedule { animation: asa-row-value-resolves var(--asa-row-cycle) ease-in-out infinite; }
.asa-product-row-scene .asa-row-ship { animation: asa-row-freight-arrives var(--asa-row-cycle) ease-in-out infinite; }
.asa-product-row-scene .asa-row-pie { animation: asa-row-cost-allocation var(--asa-row-cycle) ease-in-out infinite; }
.asa-product-row-scene .asa-row-bar:nth-of-type(2) { animation-delay: -.55s; }
.asa-product-row-scene .asa-row-bar:nth-of-type(3) { animation-delay: -1.1s; }
.asa-product-row-scene .asa-row-delay { animation-delay: -.7s; }
.asa-product-row-scene .asa-row-delay-two { animation-delay: -1.4s; }
.asa-product-row-scene .asa-row-phase-two { animation-delay: -.8s; }
.asa-product-row-scene .asa-row-phase-three { animation-delay: -1.6s; }

@keyframes asa-row-system-settle {
	0%, 12%, 84%, 100% { transform: translateY(0); }
	42%, 62% { transform: translateY(-2.5px); }
}
@keyframes asa-row-system-ready {
	0%, 12%, 100% { opacity: .6; transform: scale(.985); }
	42%, 82% { opacity: 1; transform: scale(1.025); }
}
@keyframes asa-row-route-activity {
	0%, 12% { stroke-dashoffset: 0; opacity: .2; }
	48% { stroke-dashoffset: 38; opacity: .55; }
	84%, 100% { stroke-dashoffset: 76; opacity: .2; }
}
@keyframes asa-row-input-arrives {
	0%, 100% { opacity: .66; transform: translateY(1.5px); }
	18%, 35% { opacity: 1; transform: translateY(-1.5px); }
	58%, 86% { opacity: .8; transform: translateY(0); }
}
@keyframes asa-row-process-signal {
	0%, 12%, 91%, 100% { opacity: .62; transform: scale(.97); }
	37%, 61% { opacity: 1; transform: scale(1.04); }
}
@keyframes asa-row-output-ready {
	0%, 23%, 100% { opacity: .55; transform: scale(.94); }
	51%, 88% { opacity: 1; transform: scale(1); }
}
@keyframes asa-row-stage-ready {
	0%, 10%, 100% { opacity: .34; }
	27%, 87% { opacity: 1; }
}
@keyframes asa-row-signal-path {
	0%, 12% { stroke-dashoffset: 100; opacity: 0; }
	22% { opacity: .9; }
	71% { stroke-dashoffset: 0; opacity: .9; }
	88%, 100% { stroke-dashoffset: -15; opacity: 0; }
}
@keyframes asa-row-measured-output {
	0%, 15% { stroke-dashoffset: 100; opacity: .3; }
	47%, 86% { stroke-dashoffset: 0; opacity: .85; }
	100% { stroke-dashoffset: 0; opacity: .3; }
}
@keyframes asa-row-value-resolves {
	0%, 12%, 100% { transform: scaleX(.35); opacity: .45; }
	48%, 88% { transform: scaleX(1); opacity: 1; }
}
@keyframes asa-row-report-trace {
	0%, 12% { stroke-dashoffset: 410; opacity: .45; }
	48%, 88% { stroke-dashoffset: 0; opacity: 1; }
	100% { stroke-dashoffset: 0; opacity: .45; }
}
@keyframes asa-row-result-check {
	0%, 16% { stroke-dashoffset: 65; opacity: .2; }
	46%, 88% { stroke-dashoffset: 0; opacity: 1; }
	100% { stroke-dashoffset: 0; opacity: .2; }
}
@keyframes asa-row-document-read {
	0%, 9% { transform: translateY(0); opacity: 0; }
	18% { opacity: .8; }
	44% { transform: translateY(86px); opacity: .8; }
	59%, 100% { transform: translateY(86px); opacity: 0; }
}
@keyframes asa-row-warehouse-read {
	0%, 13% { transform: translateY(-8px); opacity: 0; }
	22% { opacity: .9; }
	42% { transform: translateY(29px); opacity: .9; }
	55%, 100% { transform: translateY(29px); opacity: 0; }
}
@keyframes asa-row-ledger-extract {
	0%, 11% { transform: translateY(-18px); opacity: 0; }
	20% { opacity: .75; }
	38% { transform: translateY(66px); opacity: .75; }
	52%, 100% { transform: translateY(66px); opacity: 0; }
}
@keyframes asa-row-report-column {
	0%, 12%, 100% { transform: scaleY(.55); opacity: .65; }
	48%, 86% { transform: scaleY(1); opacity: 1; }
}
@keyframes asa-row-production-cycle {
	0%, 10% { transform: rotate(0deg); }
	48% { transform: rotate(160deg); }
	86%, 100% { transform: rotate(360deg); }
}
@keyframes asa-row-stock-resolves {
	0%, 12%, 100% { transform: translateY(1px); opacity: .65; }
	35%, 80% { transform: translateY(-1.5px); opacity: 1; }
}
@keyframes asa-row-data-delivery {
	0%, 12% { transform: translateX(-13px); opacity: 0; }
	25% { opacity: 1; }
	60% { transform: translateX(38px); opacity: 1; }
	73%, 100% { transform: translateX(38px); opacity: 0; }
}
@keyframes asa-row-order-packet {
	0%, 17% { transform: translateX(-10px); opacity: 0; }
	25% { opacity: 1; }
	58% { transform: translateX(54px); opacity: 1; }
	70%, 100% { transform: translateX(54px); opacity: 0; }
}
@keyframes asa-row-request-packet {
	0%, 13% { transform: translate(0, 0); opacity: 0; }
	24% { opacity: 1; }
	44% { transform: translate(43px, 21px); opacity: 1; }
	55%, 100% { transform: translate(43px, 21px); opacity: 0; }
}
@keyframes asa-row-material-delivery {
	0%, 17% { transform: translateX(-42px); opacity: 0; }
	27% { opacity: .65; }
	70% { transform: translateX(150px); opacity: .65; }
	83%, 100% { transform: translateX(150px); opacity: 0; }
}
@keyframes asa-row-material-process {
	0%, 14% { transform: translateX(-7px); opacity: 0; }
	23% { opacity: 1; }
	44%, 53% { transform: translateX(71px); opacity: 1; }
	76% { transform: translateX(157px); opacity: 1; }
	87%, 100% { transform: translateX(157px); opacity: 0; }
}
@keyframes asa-row-production-unit {
	0%, 12% { transform: translateX(0); opacity: 0; }
	23% { opacity: 1; }
	75% { transform: translateX(255px); opacity: 1; }
	86%, 100% { transform: translateX(255px); opacity: 0; }
}
@keyframes asa-row-freight-arrives {
	0%, 100% { transform: translate(-2px, 0) rotate(-.35deg); }
	48%, 67% { transform: translate(4px, -3px) rotate(.35deg); }
}
@keyframes asa-row-cost-allocation {
	0%, 12%, 100% { transform: scale(.82); opacity: .5; }
	48%, 86% { transform: scale(1); opacity: 1; }
}

/* Pause also the SVG root itself; descendants include every narrative effect.
 * Mobile/tablet never receive a reduced animation or a missing product story.
 */
.asa-product-row.is-scene-paused .asa-product-row-scene,
.asa-product-row.is-scene-paused .asa-product-row-scene * {
	animation-play-state: paused !important;
}
body.asa-motion-disabled .asa-product-row-scene,
body.asa-motion-disabled .asa-product-row-scene * {
	animation: none !important;
	transition: none !important;
}
body.asa-motion-disabled .asa-product-row-scene :is(.asa-row-telemetry, .asa-row-chart, .asa-row-check) {
	stroke-dashoffset: 0;
	opacity: 1;
}
body.asa-motion-disabled .asa-product-row-scene :is(.asa-row-scan, .asa-row-data, .asa-row-material-packet, .asa-row-conveyor, .asa-row-narrative-flow, .asa-row-inventory-scan, .asa-row-ledger-read, .asa-row-contract-packet, .asa-row-commerce-packet, .asa-row-logistics-packet) { display: none; }
@media (prefers-reduced-motion: reduce), print {
	.asa-product-row-scene, .asa-product-row-scene * {
		animation: none !important;
		transition: none !important;
	}
	.asa-product-row-scene :is(.asa-row-telemetry, .asa-row-chart, .asa-row-check) { stroke-dashoffset: 0; opacity: 1; }
	.asa-product-row-scene :is(.asa-row-scan, .asa-row-data, .asa-row-material-packet, .asa-row-conveyor, .asa-row-narrative-flow, .asa-row-inventory-scan, .asa-row-ledger-read, .asa-row-contract-packet, .asa-row-commerce-packet, .asa-row-logistics-packet) { display: none; }
	.asa-product-row-scene .asa-row-node { filter: none; }
}
