:is(
    [data-unit-visual-extension="circular_direction_lab"],
    [data-unit-visual-extension="radian_arc_lab"],
    [data-unit-visual-extension="angular_period_lab"],
    [data-unit-visual-extension="radius_speed_lab"],
    [data-unit-visual-extension="tangent_release_lab"],
    [data-unit-visual-extension="velocity_change_lab"],
    [data-unit-visual-extension="force_provider_lab"]
) {
    --ch12-ink: #17394a;
    --ch12-muted: #627a87;
    --ch12-line: #91a5af;
    --ch12-surface: #f3f8fa;
    --ch12-velocity: #087f9c;
    --ch12-force: #c65345;
    --ch12-arc: #6654ad;
    --ch12-comparison: #b06a2f;
    --ch12-neutral: #536d7a;
    width: 100%;
    min-width: 0;
    margin: clamp(1rem, 2.3vw, 1.65rem) 0;
    padding: clamp(0.88rem, 2.2vw, 1.3rem);
    border: 1px solid color-mix(in srgb, var(--ch12-velocity) 16%, transparent);
    border-radius: 1.2rem;
    background: linear-gradient(145deg, #fff 0%, var(--ch12-surface) 100%);
    color: var(--ch12-ink);
    box-shadow: 0 0.78rem 2rem rgb(23 57 74 / 0.06);
    overflow: clip;
}

.ch12-visual[data-unit-visual-extension] [hidden] {
    display: none !important;
}

.ch12-visual[data-unit-visual-extension] .ch12-visual-heading {
    display: grid;
    gap: 0.16rem;
    margin-bottom: 0.78rem;
}

.ch12-visual[data-unit-visual-extension] .ch12-visual-heading h3 {
    margin: 0;
    color: var(--ch12-ink);
    font-size: var(--unit-text-heading-medium, 17px);
    font-weight: 760;
    line-height: 1.22;
    letter-spacing: -0.015em;
}

.ch12-visual[data-unit-visual-extension] .ch12-visual-kicker {
    margin: 0;
    color: var(--ch12-velocity);
    font-size: var(--unit-text-micro, 11px);
    font-weight: 800;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-state-controls, .ch12-timeline) {
    width: 100%;
    min-width: 0;
}

.ch12-visual[data-unit-visual-extension] .ch12-state-controls {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(7.2rem, 100%), 1fr));
    gap: 0.42rem;
    margin: 0 0 0.72rem;
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-state-button, .ch12-timeline-button) {
    min-width: 0;
    min-height: 38px;
    padding: 0.42rem 0.62rem;
    border: 1px solid color-mix(in srgb, var(--ch12-line) 64%, transparent);
    border-radius: 0.68rem;
    background: rgb(255 255 255 / 0.95);
    color: var(--ch12-ink);
    font: inherit;
    font-size: var(--unit-text-meta, 12px);
    font-weight: 740;
    line-height: 1.15;
    cursor: pointer;
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-state-button, .ch12-timeline-button):hover {
    border-color: var(--ch12-velocity);
}

.ch12-visual[data-unit-visual-extension] .ch12-state-button[aria-pressed="true"] {
    border-color: var(--ch12-velocity);
    background: var(--ch12-velocity);
    color: #fff;
    box-shadow: 0 0.3rem 0.8rem rgb(8 127 156 / 0.18);
}

.ch12-visual[data-unit-visual-extension] .ch12-timeline {
    display: grid;
    grid-template-columns: max-content max-content minmax(6rem, 1fr) minmax(7rem, max-content);
    align-items: center;
    gap: 0.52rem;
    margin: 0 0 0.72rem;
    padding: 0.54rem 0.62rem;
    border-radius: 0.76rem;
    background: color-mix(in srgb, var(--ch12-arc) 5%, #fff);
}

.ch12-visual[data-unit-visual-extension][data-motion-mode="loop"] .ch12-timeline {
    grid-template-columns: max-content minmax(6rem, 1fr) minmax(7rem, max-content);
}

.ch12-visual[data-unit-visual-extension] .ch12-timeline-button {
    min-height: 34px;
    color: var(--ch12-arc);
    white-space: nowrap;
}

.ch12-visual[data-unit-visual-extension] .ch12-timeline-button[aria-pressed="true"] {
    border-color: var(--ch12-arc);
    background: color-mix(in srgb, var(--ch12-arc) 9%, #fff);
}

.ch12-visual[data-unit-visual-extension] .ch12-timeline-scrub {
    width: 100%;
    min-width: 0;
    accent-color: var(--ch12-arc);
}

.ch12-visual[data-unit-visual-extension] .ch12-timeline-phase {
    min-width: 0;
    color: var(--ch12-muted);
    font-size: var(--unit-text-meta, 12px);
    font-weight: 680;
    line-height: 1.25;
    text-align: right;
}

.ch12-visual[data-unit-visual-extension] .ch12-visual-drawing {
    position: relative;
    width: 100%;
    min-width: 0;
    aspect-ratio: var(--ch12-drawing-ratio, 720 / 400);
    overflow: clip;
}

.ch12-visual[data-unit-visual-extension] .ch12-visual-drawing > svg {
    display: block;
    width: 100%;
    height: 100%;
    overflow: visible;
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-math-label, .ch12-text-label) {
    position: absolute;
    z-index: 3;
    max-width: min(13rem, 36%);
    color: var(--ch12-ink);
    font-size: var(--unit-text-meta, 12px);
    font-weight: 720;
    line-height: 1.15;
    text-align: center;
    white-space: nowrap;
    transform: translate(-50%, -50%);
    pointer-events: none;
    paint-order: stroke fill;
    text-shadow:
        -2px 0 #fff,
        2px 0 #fff,
        0 -2px #fff,
        0 2px #fff;
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-math-label, .ch12-text-label)[data-math-anchor="start"] {
    transform: translate(0, -50%);
    text-align: left;
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-math-label, .ch12-text-label)[data-math-anchor="end"] {
    transform: translate(-100%, -50%);
    text-align: right;
}

.ch12-visual[data-unit-visual-extension] .ch12-math-label.is-velocity {
    color: var(--ch12-velocity);
}

.ch12-visual[data-unit-visual-extension] .ch12-math-label.is-force {
    color: var(--ch12-force);
}

.ch12-visual[data-unit-visual-extension] .ch12-math-label.is-arc {
    color: var(--ch12-arc);
}

.ch12-visual[data-unit-visual-extension] .ch12-math-label.is-comparison {
    color: var(--ch12-comparison);
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-math-label.is-neutral, .ch12-text-label.is-rejected) {
    color: var(--ch12-neutral);
}

.ch12-visual[data-unit-visual-extension] .ch12-formula-strip {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 0.42rem 0.76rem;
    min-width: 0;
    margin-top: 0.38rem;
    padding: 0.54rem 0.66rem;
    border-radius: 0.72rem;
    background: rgb(255 255 255 / 0.82);
    color: var(--ch12-ink);
}

.ch12-visual[data-unit-visual-extension] .ch12-formula-chip {
    min-width: 0;
    max-width: 100%;
    font-size: var(--unit-text-meta, 12px);
    font-weight: 700;
    text-align: center;
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-visual-caption, .ch12-force-caption) {
    margin: 0.68rem 0 0;
    color: var(--ch12-muted);
    font-size: var(--unit-text-body-small, 13px);
    line-height: 1.48;
}

.ch12-visual[data-unit-visual-extension] .ch12-force-caption {
    min-height: 2.6em;
    margin-inline: 0.25rem;
    text-align: center;
}

.ch12-visual[data-unit-visual-extension] .ch12-track {
    fill: none;
    stroke: color-mix(in srgb, var(--ch12-line) 68%, #fff);
    stroke-width: 2.1;
}

.ch12-visual[data-unit-visual-extension] .ch12-track.is-inner {
    stroke-dasharray: 4 7;
    stroke-width: 1.2;
}

.ch12-visual[data-unit-visual-extension] .ch12-track.is-outer {
    stroke: color-mix(in srgb, var(--ch12-velocity) 34%, #fff);
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-guide, .ch12-radius-line) {
    fill: none;
    stroke: color-mix(in srgb, var(--ch12-line) 78%, #fff);
    stroke-width: 1.05;
    stroke-dasharray: 5 7;
}

.ch12-visual[data-unit-visual-extension] .ch12-radius-line {
    stroke: color-mix(in srgb, var(--ch12-neutral) 66%, #fff);
}

.ch12-visual[data-unit-visual-extension] .ch12-radius-line.is-moving {
    stroke: color-mix(in srgb, var(--ch12-arc) 60%, #fff);
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-object, .ch12-comparison-point, .ch12-release-point) {
    fill: var(--ch12-velocity);
    stroke: #fff;
    stroke-width: 2;
}

.ch12-visual[data-unit-visual-extension] .ch12-object.is-inner {
    fill: var(--ch12-comparison);
}

.ch12-visual[data-unit-visual-extension] .ch12-object.is-outer {
    fill: var(--ch12-velocity);
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-centre-point, .ch12-interaction-point) {
    fill: var(--ch12-ink);
    stroke: none;
}

.ch12-visual[data-unit-visual-extension] .ch12-release-point {
    fill: var(--ch12-comparison);
    stroke-width: 1.5;
}

.ch12-visual[data-unit-visual-extension] .ch12-vector {
    fill: none;
    stroke-width: 2.35;
    stroke-linecap: round;
}

.ch12-visual[data-unit-visual-extension] .ch12-vector.is-velocity {
    stroke: var(--ch12-velocity);
}

.ch12-visual[data-unit-visual-extension] .ch12-vector.is-force {
    stroke: var(--ch12-force);
}

.ch12-visual[data-unit-visual-extension] .ch12-vector.is-comparison {
    stroke: var(--ch12-comparison);
}

.ch12-visual[data-unit-visual-extension] .ch12-vector.is-neutral {
    stroke: var(--ch12-neutral);
}

.ch12-visual[data-unit-visual-extension] .ch12-arrowhead {
    fill: none;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.ch12-visual[data-unit-visual-extension] .ch12-arrowhead.is-velocity {
    stroke: var(--ch12-velocity);
}

.ch12-visual[data-unit-visual-extension] .ch12-arrowhead.is-force {
    stroke: var(--ch12-force);
}

.ch12-visual[data-unit-visual-extension] .ch12-arrowhead.is-arc {
    stroke: var(--ch12-arc);
}

.ch12-visual[data-unit-visual-extension] .ch12-arrowhead.is-comparison {
    stroke: var(--ch12-comparison);
}

.ch12-visual[data-unit-visual-extension] .ch12-arrowhead.is-neutral {
    stroke: var(--ch12-neutral);
}

.ch12-visual[data-unit-visual-extension] :is(.ch12-direction-arc, .ch12-period-arc) {
    fill: none;
    stroke: var(--ch12-arc);
    stroke-width: 2;
    stroke-linecap: round;
}

.ch12-visual[data-unit-visual-extension] .ch12-direction-arc {
    stroke-width: 1.6;
}

.ch12-visual[data-unit-visual-extension] .ch12-swept-arc {
    fill: none;
    stroke: var(--ch12-arc);
    stroke-width: 3;
    stroke-linecap: round;
}

.ch12-visual[data-unit-visual-extension] .ch12-comparison-line {
    fill: none;
    stroke: var(--ch12-comparison);
    stroke-width: 1.5;
    stroke-dasharray: 4 6;
}

.ch12-visual[data-unit-visual-extension] .ch12-guide.is-tangent-guide {
    stroke: color-mix(in srgb, var(--ch12-velocity) 55%, #fff);
}

.ch12-visual[data-unit-visual-extension] .ch12-guide.is-rejected {
    stroke: color-mix(in srgb, var(--ch12-force) 46%, #fff);
    stroke-dasharray: 3 8;
}

.ch12-visual[data-unit-visual-extension] .ch12-rejected-cross {
    stroke: var(--ch12-force);
    stroke-width: 1.6;
}

.ch12-visual[data-unit-visual-extension] .ch12-string {
    stroke: var(--ch12-neutral);
    stroke-width: 1.8;
}

.ch12-visual[data-unit-visual-extension] .ch12-anchor {
    fill: var(--ch12-neutral);
}

.ch12-visual[data-unit-visual-extension] .ch12-planet {
    fill: color-mix(in srgb, var(--ch12-arc) 22%, #fff);
    stroke: var(--ch12-arc);
    stroke-width: 1.6;
}

.ch12-visual[data-unit-visual-extension] .ch12-orbit {
    fill: none;
    stroke: color-mix(in srgb, var(--ch12-line) 65%, #fff);
    stroke-width: 1.25;
    stroke-dasharray: 5 7;
}

.ch12-visual[data-unit-visual-extension] .ch12-satellite {
    fill: var(--ch12-velocity);
    stroke: #fff;
    stroke-width: 2;
}

.ch12-visual[data-unit-visual-extension] .ch12-road-edge {
    fill: none;
    stroke: color-mix(in srgb, var(--ch12-neutral) 58%, #fff);
    stroke-width: 2.1;
}

.ch12-visual[data-unit-visual-extension] .ch12-car {
    fill: color-mix(in srgb, var(--ch12-velocity) 24%, #fff);
    stroke: var(--ch12-velocity);
    stroke-width: 1.8;
}

.ch12-visual[data-unit-visual-extension] .ch12-body-axis {
    stroke: var(--ch12-velocity);
    stroke-width: 1.2;
}

.ch12-visual[data-unit-visual-extension] .ch12-wall {
    fill: none;
    stroke: color-mix(in srgb, var(--ch12-neutral) 34%, #fff);
    stroke-width: 25;
}

.ch12-visual[data-unit-visual-extension] .ch12-wall-inner {
    fill: none;
    stroke: var(--ch12-neutral);
    stroke-width: 2;
}

.ch12-visual[data-unit-visual-extension] .ch12-force-panels,
.ch12-visual[data-unit-visual-extension] .ch12-force-panel {
    min-width: 0;
}

@media (max-width: 560px) {
    :is(
        [data-unit-visual-extension="circular_direction_lab"],
        [data-unit-visual-extension="radian_arc_lab"],
        [data-unit-visual-extension="angular_period_lab"],
        [data-unit-visual-extension="radius_speed_lab"],
        [data-unit-visual-extension="tangent_release_lab"],
        [data-unit-visual-extension="velocity_change_lab"],
        [data-unit-visual-extension="force_provider_lab"]
    ) {
        padding: 0.76rem;
        border-radius: 1rem;
    }

    .ch12-visual[data-unit-visual-extension] .ch12-timeline,
    .ch12-visual[data-unit-visual-extension][data-motion-mode="loop"] .ch12-timeline {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 0.44rem;
    }

    .ch12-visual[data-unit-visual-extension] .ch12-timeline-scrub {
        grid-column: 1 / -1;
        grid-row: 2;
    }

    .ch12-visual[data-unit-visual-extension] .ch12-timeline-phase {
        grid-column: 1 / -1;
        text-align: left;
        white-space: normal;
    }

    .ch12-visual[data-unit-visual-extension][data-motion-mode="loop"] .ch12-timeline-phase {
        grid-column: 2;
        grid-row: 1;
        text-align: right;
    }

    .ch12-visual[data-unit-visual-extension] .ch12-state-controls {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .ch12-visual[data-unit-visual-extension] :is(.ch12-math-label, .ch12-text-label) {
        max-width: 42%;
        font-size: max(11px, var(--unit-text-meta, 12px));
    }

    .ch12-visual[data-unit-visual-extension] .ch12-formula-strip {
        display: grid;
        grid-template-columns: minmax(0, 1fr);
        gap: 0.34rem;
    }

    .ch12-visual[data-unit-visual-extension] .ch12-formula-chip {
        overflow-wrap: anywhere;
    }
}

@media (prefers-reduced-motion: reduce) {
    .ch12-visual[data-unit-visual-extension] * {
        scroll-behavior: auto !important;
        transition-duration: 0.001ms !important;
        animation-duration: 0.001ms !important;
        animation-iteration-count: 1 !important;
    }
}
