/* Shotcraft marker-underline-title: a 10-frame left-to-right underline
   after the heading settles. Solid coral replaces the demo's textured ink. */
.research-mark { position: relative; display: inline-block; }
.research-mark::after { content: ''; position: absolute; left: 0; right: 0; bottom: -.08em; height: .055em; min-height: 2px; background: #b23f1d; transform: scaleX(1); transform-origin: left; }
.research-mark.is-marking::after { animation: research-mark-draw .333s cubic-bezier(.16,1,.3,1) .2s forwards; }
.research-mark.is-marked::after { transform: scaleX(1); }
@keyframes research-mark-draw { from { transform: scaleX(0); } to { transform: scaleX(1); } }
/* Shotcraft pill-slot-cycle: an anchored sentence stem with a single word slot
   that rolls through the vision verbs at 21-frame beats, then settles on the
   complete sentence. */
.ip-slot-wrap { position: relative; display: inline-grid; vertical-align: baseline; }
.ip-slot-sizer { grid-area: 1 / 1; visibility: hidden; }
.ip-slot-word { grid-area: 1 / 1; display: inline-block; }
.ip-slot-word.is-rolling { animation: slot-roll .267s cubic-bezier(.2,.75,.3,1) both; }
.ip-slot-word.is-active { color: #91391e; }
@keyframes slot-roll { from { transform: translateY(.55em); opacity: 0; filter: blur(3px); } to { transform: translateY(0); opacity: 1; filter: blur(0); } }
/* Shotcraft brace-expand: a pair of corner brackets expands outward around
   the phrase with a 9% spring overshoot and releases cleanly. */
.ip-brace-phrase { position: relative; display: inline-block; padding: 0 5px; margin: 0 -5px; }
.ip-brace-phrase::before, .ip-brace-phrase::after { content: ''; position: absolute; top: -.04em; bottom: -.04em; width: 6px; border: 1.8px solid #91391e; opacity: 0; pointer-events: none; }
.ip-brace-phrase::before { left: 0; border-right: 0; transform-origin: right center; }
.ip-brace-phrase::after { right: 0; border-left: 0; transform-origin: left center; }
.ip-brace-stand.is-expanding .ip-brace-phrase::before { animation: brace-left-expand .82s cubic-bezier(.18,1.35,.32,1) .14s both; }
.ip-brace-stand.is-expanding .ip-brace-phrase::after { animation: brace-right-expand .82s cubic-bezier(.18,1.35,.32,1) .14s both; }
@keyframes brace-left-expand { 0% { transform: translateX(28px) scale(.5); opacity: 0; } 22% { opacity: 1; } 52% { transform: translateX(-4px) scale(1.06); opacity: 1; } 78% { transform: translateX(0) scale(1); opacity: 1; } 100% { transform: translateX(0) scale(1); opacity: 0; } }
@keyframes brace-right-expand { 0% { transform: translateX(-28px) scale(.5); opacity: 0; } 22% { opacity: 1; } 52% { transform: translateX(4px) scale(1.06); opacity: 1; } 78% { transform: translateX(0) scale(1); opacity: 1; } 100% { transform: translateX(0) scale(1); opacity: 0; } }
/* Shotcraft word-relay-geometry: each research idea link steps into brand
   emphasis in turn with a geometric underline and releases cleanly. */
.ip-hero-meta.is-relaying a { animation: research-relay-step .42s cubic-bezier(.2,.75,.3,1) calc(.26s + var(--relay) * .26s) both; }
@keyframes research-relay-step { 0%, 100% { color: var(--ch-ink); border-bottom-color: var(--ch-line-2); } 35%, 75% { color: #91391e; border-bottom-color: var(--ch-orange); } }
@media (prefers-reduced-motion: reduce) { .research-mark.is-marking::after, .ip-slot-word.is-rolling, .ip-brace-stand.is-expanding .ip-brace-phrase::before, .ip-brace-stand.is-expanding .ip-brace-phrase::after, .ip-hero-meta.is-relaying a { animation: none; transform: none; filter: none; } .ip-slot-word.is-active { color: inherit; } }
