ui
AI orb / voice assistant orb / agent state indicator (idle · thinking · speaking)
AIアシスタントのアイコンを、待機・思考中・発話中の3状態で同じ部品のまま演じ分けるアバター演出。周りの色環の回転速度と光の締まり、中の3点の動き(まばたき→波→音量バー)だけで「いま考えている」「いま答えている」が文字なしで伝わる。状態ごとに別の画像やスピナーへ差し替えないのが要点。
02 — Prompt template
03 — Params
idleSpin(待機時に色環が1周する時間 s) — 範囲 3〜16 / 初期 8
待機は8s前後のゆっくりが「起きているが邪魔しない」速さ。4s以下だと待機なのに急いて見え、思考中との差がつかなくなる。boost(発話時の加速倍率 ×) — 範囲 1.5〜6 / 初期 4
発話中は待機の何倍速で回すか。思考中はその2/3倍に置く(4なら待機8s→思考3s→発話2s)。2倍未満だと状態が変わったことに気付かれない。barMax(発話中の音量バーの最大高 px) — 範囲 8〜32 / 初期 20
直径の2割前後が目安(96pxのオーブで20px)。3本は最大高を1 : 0.8 : 0.6に崩し、周期も0.32〜0.42sでずらすと同期せず声らしく揺れる。stateFade(状態の切り替えにかける時間 s) — 範囲 0〜1.2 / 初期 0.6
光の濃さ・ぼかし・回転速度を次の状態へ寄せる時間。0.4〜0.6sが自然。0にすると思考→発話の瞬間に色環が跳ね、部品が入れ替わったように見える。
04 — Vocab
状態駆動アニメーション(state-driven animation) — アプリの状態(idle / thinking / speaking など)を属性1つに持たせ、CSS側でその値ごとに動きを定義するやり方。表示ロジックと演出が分離でき、状態の追加も楽になる。
@property — CSSカスタムプロパティに型( など)を登録する構文。登録すると --angle を keyframes や transition で補間でき、conic-gradient の開始角を滑らかに回せる。
角速度の積分 — 毎フレーム「角度 += 速度 × 経過時間」で角度を進めること。速度だけを目標へ寄せれば、回転を止めずに加速・減速でき、角度が飛ばない。
後光(halo) — 本体の背後に置いてぼかした色の輪。濃さ・ぼかし・回転速度の3つが、そのまま状態の「熱量」の表現になる。
05 — NG → OK examples
NG
言い方: 「「AIのアイコンを、考え中と話し中で動きを変えて」」
なぜNG: 思考中はスピナー、発話中は別のGIFへ差し替える実装が返ってきがち。部品が入れ替わるたびに位置と形が跳ね、同じアシスタントに見えない。速度を変える場合も animation-duration を書き換えるだけなので、切り替えの瞬間に色環の角度が飛ぶ。応答失敗時に idle へ戻す処理も抜けやすい。
OK
言い方: 「「AI orbで。1つの部品をdata-stateで切り替え。conic-gradientの後光を待機8s/周、思考は3s、発話は2sで回し、速度はrAFで積分して0.6sで寄せる。後光はopacity 0.5→0.75→0.85・blur 7→5→4px。中の3点は待機でまばたき、思考で波、発話で高さ20pxまでの不揃いな音量バー。送信でthinking、初トークンでspeaking、finallyでidle。reduced-motionでは静止して濃さと形だけで区別」」
なぜOK: 3状態それぞれの回転周期・光の濃さ・点の動きを数値で渡し、切り替えの作法(速度の積分と寄せ時間)と、状態を実処理のどこで変えるかまで指定している。同じ部品のまま「テンポ」だけが上がっていくので、文字を読まなくても状態の変化が追える。
