/* /assets/css/systems/market-economy/how-insurance-risk-pooling-mechanism-works-explained.css — page CSS (shared by en/zh) */
/* ============ Insurance risk pooling · ip-* ============ */
body[data-topic="insurance-risk-pooling"] .ip-title{fill:#16202c;font-family:var(--mono);font-size:16px;font-weight:600;letter-spacing:.06em;text-anchor:middle}

/* policyholders */
body[data-topic="insurance-risk-pooling"] .part[data-id="part-policyholders"] .ip-person{fill:#dbeafe;stroke:#1e40af;stroke-width:2;stroke-linejoin:round}

/* the shared fund */
body[data-topic="insurance-risk-pooling"] .part[data-id="part-pool"] .ip-fund{fill:#cffafe;stroke:#0e7490;stroke-width:2.6;stroke-linejoin:round}
body[data-topic="insurance-risk-pooling"] .ip-coin{fill:#fde68a;stroke:#b45309;stroke-width:1.6}

/* the insured loss */
body[data-topic="insurance-risk-pooling"] .part[data-id="part-loss-event"] .ip-loss{fill:#ffe4e6;stroke:#be123c;stroke-width:2.6;stroke-linejoin:round}

/* shared-risk bracket */
body[data-topic="insurance-risk-pooling"] .ip-bracket{fill:none;stroke:#7c3aed;stroke-width:2.4;stroke-linecap:round}
body[data-topic="insurance-risk-pooling"] .ip-spread-label{fill:#6d28d9;font-family:var(--mono);font-size:12.5px;font-weight:700;text-anchor:middle}

/* premium flows (many small, converging) */
body[data-topic="insurance-risk-pooling"] .ip-prem{fill:none;stroke:#b45309;stroke-width:2.4;stroke-linecap:round;stroke-dasharray:7 8;animation:ip-prem 1.6s linear infinite;animation-play-state:paused}
.is-running .ip-prem{animation-play-state:running}
@keyframes ip-prem{to{stroke-dashoffset:-15}}

/* claim payout (one large) */
body[data-topic="insurance-risk-pooling"] .ip-claim{fill:none;stroke:#be123c;stroke-width:5;stroke-linecap:round;stroke-dasharray:12 12;animation:ip-claim 1.3s linear infinite;animation-play-state:paused}
.is-running .ip-claim{animation-play-state:running}
@keyframes ip-claim{to{stroke-dashoffset:-24}}

/* flow labels */
body[data-topic="insurance-risk-pooling"] .ip-prem-label{fill:#b45309;font-family:var(--mono);font-size:11.5px;font-weight:700;text-anchor:middle;pointer-events:none}
body[data-topic="insurance-risk-pooling"] .ip-claim-label{fill:#be123c;font-family:var(--mono);font-size:12px;font-weight:700;text-anchor:middle;pointer-events:none}

/* pool pulse */
body[data-topic="insurance-risk-pooling"] .ip-pool-halo{fill:none;stroke:#0e7490;stroke-width:2;transform-box:fill-box;transform-origin:center;animation:ip-halo 3s ease-out infinite;animation-play-state:paused}
.is-running .ip-pool-halo{animation-play-state:running}
@keyframes ip-halo{0%{transform:scale(.7);opacity:.75}70%{transform:scale(1.35);opacity:0}100%{transform:scale(1.35);opacity:0}}

/* highlight */
body[data-topic="insurance-risk-pooling"] .part.is-active .ip-fund,
body[data-topic="insurance-risk-pooling"] .part.is-active .ip-loss,
body[data-topic="insurance-risk-pooling"] .part.is-active .ip-person{stroke:#1d4ed8;stroke-width:3.4}
body[data-topic="insurance-risk-pooling"] .part.is-active{filter:drop-shadow(0 0 11px rgba(29,78,216,.5))}