/* CHIKARA motion (Living Motion Bible v2.0 tokens, one family) + rotor loader + fracture layer. Only transform and opacity animate.
   Tokens: CHIKARA_Living_Motion_Bible_v2.0 (DeepSeek contribution), chosen over Origami v1.0 (founder default, 1 Nov 2026). ASCII only. */
:root {
  --m-d1: 120ms; --m-d2: 200ms; --m-d3: 320ms; --m-d4: 480ms; --m-d5: 700ms;
  --m-ease: cubic-bezier(.2, .7, .3, 1); --m-ease-out: cubic-bezier(.05, .72, .12, 1); --m-ease-emph: cubic-bezier(.2, .9, .08, 1); --m-spring: cubic-bezier(.22, 1.18, .36, 1);
  --m-stagger: 56ms;
  --rotor: #A8D5C2; --rotor-mid: #6FA890; --rotor-deep: #355F4F;
}
/* Rotor (Load Animation pack, Navigator 1.11.0): blades orbit a hub; em-scaled by --rs */
.rotor { --rs: 64px; position: relative; display: inline-block; flex: none; width: var(--rs); height: var(--rs); font-size: var(--rs); }
.rotor__spin { position: absolute; inset: 0; transform-origin: 50% 50%; will-change: transform; }
.rotor__b { position: absolute; left: 50%; top: 50%; width: var(--bl, .407em); height: var(--bt, .072em); margin-top: calc(var(--bt, .072em) / -2); transform-origin: 0 50%; transform: rotate(var(--a, 0deg)) translateX(var(--off, 0em)); background: linear-gradient(90deg, var(--rotor) 0%, #8CC4AB 45%, var(--rotor-mid) 80%, #5C9680 100%); clip-path: polygon(0 16%, 66% 0, 100% 50%, 66% 100%, 0 84%); }
.rotor__hub { position: absolute; left: 50%; top: 50%; width: .237em; height: .237em; margin: -.1185em 0 0 -.1185em; border-radius: 50%; background: radial-gradient(circle at 38% 30%, #F0DFA0 0%, #E4C878 35%, #C9A84C 70%, #8A7029 100%); }
.rotor--logo { --off: .215em; --bl: .29em; --bt: .07em; }
.rotor__logo { position: absolute; left: 50%; top: 50%; width: .39em; height: .39em; margin: -.195em 0 0 -.195em; border-radius: 50%; padding: .012em; box-sizing: border-box; background: var(--gold-band); box-shadow: 0 .03em .06em rgba(45,31,16,.35), 0 0 .12em rgba(240,207,120,.45); }
.rotor__logo img { width: 100%; height: 100%; display: block; border-radius: 50%; object-fit: cover; }
.rotor.is-spinning .rotor__spin { animation: m-spin .75s linear infinite; }
.rotor--pulse .rotor__spin { animation: m-spin .9s linear infinite; }
.rotor--pulse .rotor__hub { animation: m-hub 1.6s ease-in-out infinite; }
.rotor.is-ready .rotor__logo, .rotor.is-ready .rotor__hub { animation: m-ready .7s var(--m-ease-out) 1; }
@keyframes m-spin { to { transform: rotate(360deg); } }
@keyframes m-hub { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.12); } }
@keyframes m-ready { 0% { transform: scale(1); } 45% { transform: scale(1.1); } 100% { transform: scale(1); } }
/* Wait chip: a mini rotor, only after 300 ms, never blocks input (Standards 20.17) */
.wait-chip { position: fixed; z-index: 260; left: 50%; top: calc(var(--island-strip, 60px) + 56px); transform: translateX(-50%); display: flex; align-items: center; gap: 8px; padding: 6px 14px 6px 8px; border-radius: 999px; background: var(--surface); border: 1px solid var(--line); color: var(--ink); font-size: .8rem; font-weight: 600; box-shadow: var(--shadow); pointer-events: none; }
/* Reveal: siblings stagger, parents do not */
@keyframes m-rise { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.reveal > * { animation: m-rise var(--m-d4) var(--m-ease) both; animation-delay: calc(var(--i, 0) * var(--m-stagger)); }
/* Fracture (Glass Lab, Fracture style) */
.fx-layer { position: fixed; inset: 0; pointer-events: none; z-index: 900; }
.fxg { position: fixed; left: 0; top: 0; width: 0; height: 0; pointer-events: none; }
.shard { position: absolute; pointer-events: none; will-change: transform, opacity; }
.shard .bevel, .shard .edge { position: absolute; left: 0; top: 0; width: 100%; height: 100%; pointer-events: none; }
.shard .bevel { border-radius: 14px; }
.shard .edge polygon { fill: none; stroke: rgba(255,255,255,.35); stroke-width: .8; }
.cracks { position: absolute; pointer-events: none; overflow: hidden; border-radius: 14px; }
.cracks path { fill: none; stroke-linecap: butt; stroke-linejoin: round; }
.cracks .c-dark path { stroke: rgba(26,18,8,.55); }
.cracks .c-light path { stroke: rgba(255,255,255,.55); }
html[data-family="dark"] .cracks .c-dark path { stroke: rgba(0,0,0,.7); }
.pcracks { left: 0; top: 0; width: 100%; height: 100%; z-index: 3; }
.holdring { position: fixed; width: 56px; height: 56px; margin: -28px 0 0 -28px; pointer-events: none; z-index: 950; }
.holdring svg { width: 100%; height: 100%; transform: rotate(-90deg); }
.holdring circle { fill: none; stroke-width: 2.5; }
.holdring .t { stroke: var(--line); }
.holdring .p { stroke: var(--gold); stroke-linecap: round; }
.releasing { will-change: opacity; }
@media (prefers-reduced-motion: reduce) {
  .rotor.is-spinning .rotor__spin, .rotor--pulse .rotor__spin, .rotor--pulse .rotor__hub, .reveal > * { animation: none !important; }
}
